题解 | #自动售货系统#
自动售货系统
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"); } }