题解 | #自动售货系统#

自动售货系统

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");
    }
}
全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 12:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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