题解 | #自动售货系统#
自动售货系统
https://www.nowcoder.com/practice/cd82dc8a4727404ca5d32fcb487c50bf
没啥好说的,一步步慢慢写
import java.util.*; public class Main{ // static int[] goods = new int[6]; // static int[] box = new int[4]; static int payment = 0; // static List<String> goodsName = List.of("A1", "A2", "A3", "A4", "A5", "A6"); static List<String> goodsName = Arrays.asList("A1", "A2", "A3", "A4", "A5", "A6"); static Map<String, Integer> goodsPrice = new HashMap<>(); static { goodsPrice.put("A1", 2); goodsPrice.put("A2", 3); goodsPrice.put("A3", 4); goodsPrice.put("A4", 5); goodsPrice.put("A5", 8); goodsPrice.put("A6", 6); } static int[] boxName = {1, 2, 5, 10}; static Map<String, Integer> goods = new LinkedHashMap<>(); static Map<Integer, Integer> box = new LinkedHashMap<>(); public static void main(String[] args) { Scanner scan = new Scanner(System.in); String input = scan.nextLine(); String[] commands = input.split("\\;"); //分别处理命令 for (String command : commands) { //初始化 if (command.startsWith("r")) System.out.println(initialize(command)); //投币 if (command.startsWith("p")) System.out.println(pay(command)); //购买商品 if (command.startsWith("b")) System.out.println(buy(command)); //退币 if (command.startsWith("c")) System.out.println(refund(command)); //查询 if (command.startsWith("q")) System.out.println(query(command)); } } //初始化输出 public static String initialize(String command) { String[] inputs = command.split(" "); String[] input1 = inputs[1].split("\\-"); String[] input2 = inputs[2].split("\\-"); for (int i = 0; i < goodsName.size(); i++) { goods.put(goodsName.get(i), Integer.parseInt(input1[i])); if (i < boxName.length) { box.put(boxName[i], Integer.parseInt(input2[i])); } } return "S001:Initialization is successful"; } //投币输出 public static String pay(String command) { int money = Integer.parseInt(command.split(" ")[1]); if (!(money == 1 || money == 2 || money == 5 || money == 10)) return "E002:Denomination error"; if (((box.get(1) + 2 * box.get(2)) < money) && (money != 1 && money != 2)) return "E003:Change is not enough, pay fail"; if (sumGoods() == 0) return "E005:All the goods sold out"; //若成功投币 payment += money; box.put(money, box.get(money) + 1); return "S002:Pay success,balance=" + payment + ""; } //购买商品输出 public static String buy(String command) { String goodsBuyed = command.split(" ")[1]; if (!goodsName.contains(goodsBuyed)) return "E006:Goods does not exist"; if (goods.get(goodsBuyed) == 0) return "E007:The goods sold out"; if (payment < goodsPrice.get(goodsBuyed)) return "E008:Lack of balance"; //购买商品成功 payment -= goodsPrice.get(goodsBuyed); goods.put(goodsBuyed, goods.get(goodsBuyed) - 1); return "S003:Buy success,balance=" + payment + ""; } //退币 public static String refund(String command) { if (payment == 0) return "E009:Work failure"; //按照退币原则进行退币 StringBuilder sb = new StringBuilder(); sb.append("1 yuan coin number=").append(payment % 5 % 2).append("\n"). append("2 yuan coin number=").append(payment % 5 / 2).append("\n"). append("5 yuan coin number=").append(payment % 10 / 5).append("\n"). append("10 yuan coin number=").append(payment / 10); box.put(1,box.get(1)-payment % 5 % 2); box.put(2,box.get(2)-payment % 5 / 2); box.put(5,box.get(5)-payment % 10 / 5); box.put(10,box.get(10)-payment / 10); payment = 0; return sb.toString(); } //查询 public static String query(String command) { if(command.split(" ").length!=2) return "E010:Parameter error"; String option = command.split(" ")[1]; StringBuilder sb = new StringBuilder(); if (option.equals("0")) { List<Map.Entry> list = new ArrayList<>(goods.entrySet()); list.sort(new Comparator<Map.Entry>() { public int compare(Map.Entry e1, Map.Entry e2) { if (e1.getValue() != e2.getValue()) { return (int)e2.getValue() - (int)e1.getValue(); } else { return 0; } } }); for (Map.Entry e : list) { sb.append(e.getKey() + " " + goodsPrice.get(e.getKey()) + " " + goods.get( e.getKey()) + " \n"); } } else if (option.equals("1")) { sb.append("1 yuan coin number=").append(box.get(1)).append("\n"). append("2 yuan coin number=").append(box.get(2)).append("\n"). append("5 yuan coin number=").append(box.get(5)).append("\n"). append("10 yuan coin number=").append(box.get(10)).append("\n"); } else { return "E010:Parameter error"; } sb.delete(sb.length() - 1, sb.length()); return sb.toString(); } //计算所有商品的剩余数量 public static int sumGoods() { int sum = 0; for (int item : goods.values()) { sum += item; } return sum; } }