Java 换台机器只数硬币

Java 换台机器只数硬币,java,if-statement,logic,currency,Java,If Statement,Logic,Currency,我在为Java类构建一个变更机时遇到了问题。我对编程非常陌生,所以这可能是一个愚蠢的逻辑错误。我的找零机要求用户输入物品的价格,然后输入支付的金额,然后计算用户将收到的25美分、10美分等的找零金额。。。然而,每次只计算1个季度。代码如下: import java.util.Scanner; import java.text.*; public class Main { public static void main(String[] args) { float p

我在为Java类构建一个变更机时遇到了问题。我对编程非常陌生,所以这可能是一个愚蠢的逻辑错误。我的找零机要求用户输入物品的价格,然后输入支付的金额,然后计算用户将收到的25美分、10美分等的找零金额。。。然而,每次只计算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 ");
    }
}
import java.util.Scanner;
导入java.text.*;
公共班机{
公共静态void main(字符串[]args)
{
浮动便士=0.1F,镍=0.5F,一角硬币=0.10F,四分之一硬币=0.25F;
int pennyCtr=0,nickelCtr=0,dimctr=0,quartectr=0;
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入采购价格:”);
浮动价格=scan.nextFloat();
DecimalFormat paidFormat=新的DecimalFormat(“0.00”);
System.out.println(“输入支付金额:”);
float paid=scan.nextFloat();
浮动变动=(浮动)(已付价格);
System.out.println(“您对$”的更改+paidFormat.format(付费)
+是:“+改变”;
如果(更改>=.25)
{
变动-=季度;
四分之一CTR++;
}
否则,如果(更改<.25)
{
改变-=一角硬币;
dimeCtr++;
}
否则,如果(更改<.10)
{
变化-=镍;
nickelCtr++;
}
否则,如果(更改<.5)
{
零钱-=便士;
pennyCtr++;
}
System.out.println(“您对$”的更改+paidFormat.format(付费)+
是:“+quarterCtr+”Quarter,“+dimeCtr+”Dimes,”
+五分镍币+五分镍币,+pennyCtr+五分镍币;
System.out.println(“由Ashley编写的程序”);
}
}

快速查看代码后,我发现这段代码之间缺少一个循环:

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++;
}
if(更改>=.25)
{
变动-=季度;
四分之一CTR++;
}
否则,如果(更改<.25)
{
改变-=一角硬币;
dimeCtr++;
}
否则,如果(更改<.10)
{
变化-=镍;
nickelCtr++;
}
否则,如果(更改<.5)
{
零钱-=便士;
pennyCtr++;
}
基本上,您的程序将在将更改减少到0之前终止。这就是为什么你每次只数一枚硬币。也许考虑一下while循环(而改变> 0)。

< P>一些一般提示:

  • 看看您是如何声明变量的,尤其是penny和nickel
  • 看看你是如何计算变化的。是这样吗
  • 您需要一个
    while
    循环。它应该循环多长时间?循环什么时候结束
  • 当你打印出“你从……的变化”时,考虑如何可以正确地输出变化。
  • 谷歌一些关于浮点减法的问题-这并不像最初看起来那么容易!请考虑使用<代码>双< /代码>代替您的声明和输入。

  • 你不应该在上面使用一些while循环吗?@HovercraftFullOfEels:是吗?而(改变!=0)可能?我对这真的很陌生。我会试试看,但我不确定它是否能解决只算四分之一的问题。。编辑:它确实有用!非常感谢。现在我只要让它停止不停地数一角硬币就行了。我打赌它会的;继续努力。@AshleyTaylor:提示:看最后一条else if语句和float penny/nickel声明。你确定他们是对的吗?在那之后,你可能想研究处理小数的方法。我在if语句的开头添加了一个while循环。尽管如此,我仍然每次只数1枚硬币。while(change>=0){然后我开始if/else语句}@阿什利·泰勒:你运气好吗?@AndrewMartin是的,所有的评论都很有帮助。while循环成功了,现在我只看小数。你说得对,便士/五分硬币的价值是错误的。应该是01和05,但我不确定我是否需要小数点。while循环也导致它为每个硬币计数打印一行,但我认为我可以解决这个问题。@AshleyTaylor:我发布了一些提示。您的while循环只需要围绕if和else语句1+运行,以推动她找到解决方案。