java 自动售货机程序java

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37176165/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 02:16:09  来源:igfitidea点击:

Vending machine program java

java

提问by Doomboy911

In this vending machine code of mine, if I input excess funds it doesn't give me the change back. What am I missing here?

在我的这个自动售货机代码中,如果我输入多余的资金,它不会给我找零。我在这里错过了什么?

public static void main(String[] args) {
    int Food = runMenu();
    int Price = retrievePrice(Food);
    int change = moneyInserted(Price);
}

public static int runMenu(){
    Scanner keyboard = new Scanner(System.in);
    int choice = 0 ;
    System.out.println("\n\nPlease enter your selection:"
                + "\n1: Snickers \t 125"
                + "\n2: Reeses Cup \t 130"
                + "\n3: Doritoes \t 150"
                + "\n4: Pepsi \t 185"
                + "\n5: Exit ");
    choice = keyboard.nextInt();
    return choice;        
}

public static int retrievePrice(int menuChoice){
    if (menuChoice == 1)
        return 125;
    if (menuChoice == 2)
        return 130;
    if (menuChoice == 3)
        return 150;
    if (menuChoice == 4)
        return 185;
    else return 0;
}

public static int moneyInserted(int Price){
    Scanner keyboard = new Scanner(System.in);
    int money = 0;
    System.out.println("Your item costs: " + Price + " Please enter the amount of money:");
    money = keyboard.nextInt();
    while (money < Price){
        System.out.println("Please insert sufficient funds");
        money = money + keyboard.nextInt();
    }
    return money - Price ;
}

public static void changeOut(int change){
    int quarters = 0;
    int dimes = 0;
    int nickels = 0;
    while (change >= 25){
        quarters = quarters + 1;
        change = change - 25;
    }
    while (change >= 10){
        nickels = dimes + 1;
        change = change - 10;
        while (change >= 5){
            nickels = nickels + 1;
            change = change - 5;
        }
    }
}

回答by Sна?ош?а?

Your code does return the change, you are just not using it.

您的代码确实返回了更改,只是您没有使用它。

Modify your code like this:

像这样修改你的代码:

  1. After you calculate the change, pass it to your changeOut()method which is doing the change calculation in your code. To do that, add this line to the end of the main()method:

    changeOut(change);
    
  1. 计算 后change,将其传递给您的changeOut()方法,该方法在您的代码中进行更改计算。为此,请将此行添加到main()方法的末尾:

    changeOut(change);
    

2.There is slight logical mistake in your changeOut()method. Modify it like this:

2.你的changeOut()方法有轻微的逻辑错误。像这样修改它:

public static void changeOut(int change){
    int quarters = 0;
    int dimes = 0;
    int nickels = 0;
    while (change >= 25){
        quarters = quarters + 1;
        change = change - 25;
    }
    while (change >= 10){
        dimes = dimes + 1;
        change = change - 10;
    }
    while (change >= 5){
        nickels = nickels + 1;
        change = change - 5;
    }

    // to see the change, print it to the console perhaps
    System.out.printf("\nHere's your change:\n%d quarters, %d dimes, %d nickels and %d pennies!",
        quarters, dimes, nickels, change);
}

回答by Pratik Sherdiwala

private static int totalNotes = 0;
private static int amount = 0;

private static void printAmount(int maxAmt) {
    amount = amount - maxAmt;
    totalNotes++;
    System.out.print(maxAmt + "-");
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter Amount");
    amount = scanner.nextInt();
    int maxAmt = 0;

    while (amount != 0) {
        if (amount >= 2000) {
            maxAmt = 2000;
        } else if (amount >= 500) {
            maxAmt = 500;
        } else if (amount >= 200) {
            maxAmt = 200;
        } else if (amount >= 100) {
            maxAmt = 100;
        } else if (amount >= 50) {
            maxAmt = 50;
        } else if (amount >= 20) {
            maxAmt = 20;
        }
        // as same you can do this for
        /*10, 5, 2, 1*/
        printAmount(maxAmt);
    }
    System.out.println("\nTotal notes : " + totalNotes);
}