题解 | #自动售货系统#
自动售货系统
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");
}
}
查看2道真题和解析