【问题标题】:Vending machine program java自动售货机程序java
【发布时间】:2016-05-12 02:17:41
【问题描述】:

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

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;
        }
    }
}

【问题讨论】:

  • 你试过调试吗?
  • 你在哪里调用changeOut?我没看到
  • 我建议你应该正确地格式化你的代码。
  • Erm 我不熟悉季度和英镑,但我建议先将所有值转换为最低值。例如,在我的国家,我们有美元和美分。因此,要构建一个可以退货的自动售货机,我需要将输入的金额和以美分为单位的食物价格进行换算。然后 InputAmt - FoodPrice = ReturnMoney(都以美分为单位)
  • 你计算了零钱的数量,但你没有打印出来。是的,这段代码未完成。是什么阻止您回馈零钱?

标签: java


【解决方案1】:

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

像这样修改你的代码:

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

    changeOut(change);
    

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);
}

【讨论】:

    【解决方案2】:
    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);
    }
    

    【讨论】:

    • 本网站上通常不赞成仅使用代码的答案。您能否编辑您的答案以包含一些 cmets 或对您的代码的解释?解释应该回答这样的问题:它有什么作用?它是如何做到的?它去哪儿了?它如何解决OP的问题?请参阅:How to anwser。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多