题解 | #自动售货系统#

自动售货系统

https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf

import java.util.*;

public class HJ98 {
    static class Commodity{
        String name;
        int price;
        int count;

        public Commodity(String name, int price) {
            this.name = name;
            this.price = price;
        }
    }

    static class Money{
        int value;
        int count;

        public Money(int value) {
            this.value = value;
        }
    }

    static ArrayList<Commodity> commodities = new ArrayList<>();
    static ArrayList<Money> moneyBox = new ArrayList<>();
    static int remainMoney = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        commodities.add(new Commodity("A1",2));
        commodities.add(new Commodity("A2",3));
        commodities.add(new Commodity("A3",4));
        commodities.add(new Commodity("A4",5));
        commodities.add(new Commodity("A5",8));
        commodities.add(new Commodity("A6",6));
        moneyBox.add(new Money(1));
        moneyBox.add(new Money(2));
        moneyBox.add(new Money(5));
        moneyBox.add(new Money(10));

        String string = sc.nextLine();
        String[] split = string.split(";");
        for (int i = 0; i < split.length; i++) {
            operator(split[i]);
        }
    }

    public static void operator(String operatorString){
        String[] split = operatorString.split(" ");
        String order = split[0];
        switch (order){
            case "r":
                init(operatorString);
                break;
            case "c":
                returnBackMoney(operatorString);
                break;
            case "p":
                addInMoney(operatorString);
                break;
            case "b":
                purchaseCommodity(operatorString);
                break;
            case "q":
                query(operatorString);
                break;
            default:
                System.out.println("E010:Parameter error");
        }
    }


    private static void query(String operatorString) {
        String[] split = operatorString.split(" ");
        int order = Integer.parseInt(split[1]);
        if(order == 0){
            ArrayList<Commodity> tempCommodities = new ArrayList<>();
            tempCommodities.addAll(commodities);
            tempCommodities.stream().sorted((o1,o2)-> o2.count-o1.count).forEach(s->{
                System.out.println(s.name+" "+s.price+" "+s.count);
            });
        } else if (order == 1) {
            for (int i = 0; i < moneyBox.size(); i++) {
                System.out.println(moneyBox.get(i).value+" yuan coin number="+moneyBox.get(i).count);
            }
        } else {
            System.out.println("E010:Parameter error");
        }
    }

    private static void purchaseCommodity(String operatorString) {
        String[] split = operatorString.split(" ");
        String commodity = split[1];
        int index = 0;
        boolean isContain = false;
        for (int i = 0; i < commodities.size(); i++) {
            if(commodity.equals(commodities.get(i).name)){
                isContain = true;
                index = i;
            }
        }
        if(!isContain){
            System.out.println("E006:Goods does not exist");
            return;
        }
        if(commodities.get(index).count == 0){
            System.out.println("E007:The goods sold out");
            return;
        }
        if(remainMoney<commodities.get(index).price){
            System.out.println("E008:Lack of balance");
            return;
        }
        commodities.get(index).count--;
        remainMoney -= commodities.get(index).price;
        System.out.println("S003:Buy success,balance="+remainMoney);
    }

    private static void addInMoney(String operatorString) {
        String[] split = operatorString.split(" ");
        int money = Integer.parseInt(split[1]);
        if(money!=1&&money!=2&&money!=5&&money!=10){
            System.out.println("E002:Denomination error");
            return;
        }
        if(money!=1&&money!=2){
            int change = moneyBox.get(0).count*moneyBox.get(0).value + moneyBox.get(1).count*moneyBox.get(1).value;
            if(change<money){
                System.out.println("E003:Change is not enough, pay fail");
                return;
            }
        }
        int count = 0;
        for (int i = 0; i < commodities.size(); i++) {
            count+=commodities.get(i).count;
        }
        if(count == 0){
            System.out.println("E005:All the goods sold out");
            return;
        }
        remainMoney += money;
        for (int i = 0; i < moneyBox.size(); i++) {
            if(money == moneyBox.get(i).value){
                moneyBox.get(i).count++;
            }
        }
        System.out.println("S002:Pay success,balance="+remainMoney);
    }

    private static void returnBackMoney(String operatorString) {
        if(remainMoney == 0){
            System.out.println("E009:Work failure");
            return;
        }

        int[] backMoneyCount = new int[4];
        for (int i = moneyBox.size()-1; i >= 0; i--) {
            while (moneyBox.get(i).count>0 && moneyBox.get(i).value<=remainMoney&&remainMoney>0){
                backMoneyCount[i]++;
                moneyBox.get(i).count--;
                remainMoney -= moneyBox.get(i).value;
            }
        }
        System.out.println("1 yuan coin number="+backMoneyCount[0]);
        System.out.println("2 yuan coin number="+backMoneyCount[1]);
        System.out.println("5 yuan coin number="+backMoneyCount[2]);
        System.out.println("10 yuan coin number="+backMoneyCount[3]);
    }

    private static void init(String operatorString) {
        String[] split = operatorString.split(" ");
        String[] split1 = split[1].split("-");
        String[] split2 = split[2].split("-");
        for (int i = 0; i < split1.length; i++) {
            commodities.get(i).count = Integer.parseInt(split1[i]);
        }
        for (int i = 0; i < split2.length; i++) {
            moneyBox.get(i).count = Integer.parseInt(split2[i]);
        }
        System.out.println("S001:Initialization is successful");
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务