【问题标题】:Change Machine Only Counting Quarters仅更换机器计数宿舍
【发布时间】:2013-08-21 20:01:03
【问题描述】:

我为我的 Java 类构建的更改机器出现问题。我对编程很陌生,所以这可能是一个愚蠢的逻辑错误。我的找零机要求用户输入商品的价格,然后输入支付的金额,然后它应该计算用户将收到多少硬币,硬币等......但是,它每次只计算 1 个季度。代码如下:

import java.util.Scanner;
import java.text.*;

public class Main {

    public static void main(String[] args) 
    {
    float penny = .1F, nickel = .5F, dime = .10F, quarter = .25F;
    int pennyCtr = 0, nickelCtr = 0, dimeCtr = 0, quarterCtr = 0;

    Scanner scan = new Scanner(System.in);

    System.out.println("Enter Purchase Price: ");
    float price = scan.nextFloat();
    DecimalFormat paidFormat = new DecimalFormat("0.00");

    System.out.println("Enter Amount Paid: ");
    float paid = scan.nextFloat();

    float change = (float) (paid - price);

    System.out.println("Your change from $" + paidFormat.format(paid) 
            + " is: " + change);

    if (change >= .25)
    {
        change -= quarter;
        quarterCtr++;
    }
    else if (change < .25)
    {
        change -= dime;
    dimeCtr++;
    }
    else if (change < .10)
    {
    change -= nickel;
    nickelCtr++;
    }
    else if (change < .5)
    {
        change -= penny;
        pennyCtr++;
    }

    System.out.println("Your change from $" + paidFormat.format(paid) +
            " is: " + quarterCtr + " Quarters, " + dimeCtr + " Dimes, "
            + nickelCtr + " Nickles, " + pennyCtr + " Pennies. ");

    System.out.println("Program written by Ashley ");
    }
}

【问题讨论】:

  • 你不应该在那里使用一些while循环吗?
  • @HovercraftFullOfEels:是吗?虽然(更改!= 0)也许?我对此真的很陌生。我会尝试,但我不确定它是否能解决它只计算四分之一的问题。编辑:它确实有帮助!谢谢!现在我只需要让它停止连续计算硬币..
  • 我敢打赌;继续努力。
  • @AshleyTaylor:提示:查看最后一个 else if 语句和 float penny/nickel 声明。你确定他们是对的吗?
  • 之后,您可能需要查看BigDecimal 处理小数。

标签: java if-statement logic currency


【解决方案1】:

一些一般提示:

  1. 看看你是如何声明你的变量的,尤其是 penny 和 Nine。
  2. 看看你是如何计算变化的。对吗?
  3. 您需要一个while 循环。它应该循环多长时间?循环应该什么时候结束?
  4. 当您打印出“Your change from...”时,请考虑如何整齐地输出更改。
  5. 谷歌关于浮点减法的一些问题 - 它并不像最初看起来那么容易!考虑使用 double 代替您的声明和输入。

【讨论】:

  • 1+ 用于推动她找到解决方案。
【解决方案2】:

快速查看代码告诉我,您在这段代码之间缺少一个循环:

if (change >= .25)
{
    change -= quarter;
    quarterCtr++;
}
else if (change < .25)
{
    change -= dime;
dimeCtr++;
}
else if (change < .10)
{
change -= nickel;
nickelCtr++;
}
else if (change < .5)
{
    change -= penny;
    pennyCtr++;
}

基本上,您的程序将在将零钱减少到 0 之前终止。这就是您每次只计算 1 个硬币的原因。也许考虑一个while循环(while change > 0)。

【讨论】:

  • 我在 if 语句的开头添加了一个 while 循环..我仍然每次只数 1 个硬币..while (change >= 0) { 然后我开始我的 if/else语句}
  • @AshleyTaylor:你还有运气吗?
  • @AndrewMartin 是的,所有的 cmets 都非常有帮助。 while 循环起到了作用,现在我只是在研究小数。你是对的,一分钱/镍是错误的价值。它应该是 01 & 05 但我不确定我什至需要小数点。 while 循环也导致它为每个硬币计数打印一行,但我想我可以解决这个问题。
  • @AshleyTaylor:我发布了一些提示。您的 while 循环只需要围绕 if 和 else 语句运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多