【问题标题】:Vending Machine Change Calculator自动售货机零钱计算器
【发布时间】:2018-03-08 18:52:21
【问题描述】:

我想将输入的整数分解为不同大小的硬币:25 美分硬币、10 美分硬币、5 美分硬币和 1 美分硬币。但我不知道该怎么处理五分钱和便士。

例如87的输入应该输出:

3 美分,1 美分,0 镍,2 便士

但我明白了:

3 美分,1 美分,1 镍,1 便士。

我希望它检查它是否是有效条目,如果不是,我希望它告诉用户再次输入它,直到它获得有效条目。
其次,如果它给出了有效的条目,我希望它再次运行程序,但一旦给出了无效的条目,我希望程序要求用户输入一个有效的条目。
我设法完成了大部分工作,但我无法弄清楚如何让用户一遍又一遍地输入另一个条目。我的代码在第二次运行后停止。
请帮忙。

下面是我的代码:

public class VendingMachineChangeCalculator {
    public static void main(String[] args) {    
        Scanner takeit = new Scanner(System.in);
        System.out.println("Enter a whole number from 1 to 99"
            + "\nI will find a combination of coins that equals"
            +"the amount of change ");
        int money = 0;
        System.out.println("Please enter number: ");
        money = takeit.nextInt();

    if(money>0 && money<=99) {
        System.out.println("You have: ");

        int quarter, dime, nickel, penny;

        quarter = money/25;
        money = money %25;

        dime = money/10;
        money = money %10;

        nickel = money/5;
        money = money%5;
        penny = money;

        System.out.println(quarter + " quarters");
        System.out.println(dime + " dimes");
        System.out.println(nickel + " nickles");
        System.out.println(penny + " pennies");

        System.out.print("Good job, enter a new valid integer: ");
        money = takeit.nextInt();                       
}
 else  {System.out.print("Invalid entry, please try again: ");
 money = takeit.nextInt();
 } 
    takeit.close();
    }
 }

【问题讨论】:

  • 从钱中减去 25 美分和 1 美分(在执行适当的乘法之后),然后用它来计算镍和便士。镍的数量与硬币的数量无关。硬币和镍币也是如此。
  • 我做了季度 = 钱/25;金钱 = 金钱 %25;一角钱=钱/10;钱=钱%10;镍=钱/5;钱=钱%5;一分钱=钱;成功了,非常感谢
  • 欢迎来到 Stack Overflow!我已经编辑了您的问题以提高可读性并添加了硬币大小信息(如果没有它,非英语母语人士可能很难理解这个问题)。我希望你能得到好的答案! (另外,提示:搜索贪心算法——这是它解决的经典问题)
  • 我更新了我的问题,你能看一下吗?

标签: java loops java.util.scanner


【解决方案1】:

你的代码逻辑错了,但你的想法是对的。

你的代码应该做的第一个问题是:


“钱”可以容纳多少个季度

quarter = money/25

这部分是正确的。


但是在计算完硬币的数量之后,你应该从总金额中减去它,然后再移动到下一个硬币。

我可以在剩下的钱中放入多少硬币?

money = money - quarter*25
dimes = money/10

同样的逻辑适用于其他硬币:

money = money - dime*10
nickel = money/5

等等:

money = money - nickel*5
penny = money

这是解决此问题的一种简单而彻底的方法,可以简化。 所以,完整的代码:

public class VendingMachineChangeCalculator {

public static void main(String[] args) {    
    // TODO Auto-generated method stub    
Scanner takeit = new Scanner(System.in);
System.out.println("Enter a whole number from 1 to 99"
    + "\nI will find a combination of coins that equals"
    +"the amount of change ");
int money = 0;
System.out.println("Please enter number: ");
money = takeit.nextInt();
takeit.close();
System.out.println("You have: ");
int quarter, dime, nickel, penny;

quarter = money/25
money = money - quarter*25;
dime = money/10;
money = money - dime*10;
nickel = money/5;
money = money - nickel*5;
penny = money;

System.out.println(quarter + " quarters");
System.out.println(dime + " dimes");
System.out.println(nickel + " nickels");
System.out.println(penny + " pennies");


    }

}

【讨论】:

  • 我做了季度 = 钱/25;金钱 = 金钱 %25;一角钱=钱/10;钱=钱%10;镍=钱/5;钱=钱%5;一分钱=钱;成功了,非常感谢
【解决方案2】:

镍和便士的计算方式应该不同。试试这个

nickel = ((money%25)%10)/5;
penny = ((money%25)%10)%5;

【讨论】:

  • 我做了季度=钱/25;金钱 = 金钱 %25;一角钱=钱/10;钱=钱%10;镍=钱/5;钱=钱%5;一分钱=钱;成功了,非常感谢
【解决方案3】:

这里是如何获得正确数量的硬币

change = 87;

基本上你所需要的就是数一数你会得到多少硬币,不要忘记计算剩下的。

quarters           = Math.floor(change / 25);
quarters_leftover  = change % 25;

dimes              = Math.floor(quarters_leftover / 10);
dimes_leftover     = quarters_leftover % 10;

nickels            = Math.floor(dimes_leftover / 5);
nickels_leftover   = dimes_leftover % 5;

penies   = Math.floor(nickels_leftover / 1);

抱歉解释不好,我的英文不够好,无法为你详细解释。

已编辑:

如果你想重新进入,你需要把它放在一个循环中。所以用if代替,你需要把它改成while,这样如果满足条件就会循环

while(money > 0 && money <= 99) {
    System.out.println("You have: ");

    int quarter, dime, nickel, penny;

    quarter = money/25;
    money = money %25;

    dime = money/10;
    money = money %10;

    nickel = money/5;
    money = money%5;
    penny = money;

    System.out.println(quarter + " quarters");
    System.out.println(dime + " dimes");
    System.out.println(nickel + " nickles");
    System.out.println(penny + " pennies");

    System.out.print("Good job, enter a new valid integer: ");
    money = takeit.nextInt();                       
}

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多