改为硬币数量

时间:2016-04-05 15:50:53

标签: java

我试图获得满足规定变化量(1-99)所需的最小硬币数量(四分之一,硬币,硬币和便士)。例如:

Change: 93

Quarters: 3

Dimes: 1

Nickels: 1

Pennies: 3

当我运行我的程序时,我没有得到我应该得到的答案。我的问题是如何使我的程序中的输出看起来像上面的解决方案?我是否更改了程序中的方程式以获得我想要的数字?我所拥有的计划的唯一部分是达到规定金额所需的季度数量。该程序还需要适用于1到99之间的任何规定数量。

这是我到目前为止所拥有的:

package mincoins;
import java.util.Scanner;

public class MinCoins2
{

    public static void main(String[] args)

    {
        int change = 0;
        int quarters = 0;
        int dimes = 0;
        int nickels = 0;
        int pennies = 0;
        try ( //creates a copy of Scanner class
                Scanner in = new Scanner(System.in))
        {
            System.out.println("Please enter amount of change(1-99)");

            change = in.nextInt();

            //loop for quarters
            while (change >= 25)
            {
                change = change - 25;
                quarters = quarters + 1;
            }
            while (change >= 10)
            {
                change = change - 10;
                dimes = dimes + 1;
            }
            while (change >= 5)
            {
                change = change - 5;
                nickels = nickels + 1;
            }
            pennies = change;
            System.out.println("Change: " + change);
            System.out.println("Quarters = " + change);
            System.out.println("Dimes = " + change);
            System.out.println("Nickels = " + change);
            System.out.println("Pennies = " + change);
        }
    }//end of main
}//end of class

3 个答案:

答案 0 :(得分:1)

你最后4行有拼写错误:

System.out.println("Change:" + change);
System.out.println("Quarters= "+ change);
System.out.println("Dimes=" + change);
System.out.println("Nickels=" + change);
System.out.println("Pennies=" + change);

是否全部打印change

此外,while循环条件应为>=而不是>

最后,要在最后打印出更改,您必须复制它,因为您要在while循环中修改它。

change = in.nextInt();
int changeOut = change;
...
System.out.println("Change:" + changeOut);

Live Demo

答案 1 :(得分:1)

显然错字是问题所在,需要:

System.out.println("Quarters = " + quarters);
System.out.println("Dimes = " + dimes);
System.out.println("Nickels = " + nickles);
System.out.println("Pennies = " + change);

但我想就这段代码的工作方式提出建议W.R.T.循环,例如:

//loop for quarters
while (change > 25) {
    change = change - 25;
    quarters = quarters + 1;
}

这很容易在没有循环的情况下完成:

quarters = change / 25;
change = change - quarters * 25;

这是因为change25int s,所以/会进行整数除法。它将给出适合变化的最大数量的季度,即它的四舍五入。

更进一步,您还可以使用%模运算符来获取每个步骤的剩余更改:

quarters = change / 25;
change = change % 25;

dimes = change / 10;
change = change % 10;

nickels = change / 5;
change = change % 5;

答案 2 :(得分:0)

主要问题是您正在使用的变量。您应该在适当的位置使用quartersdimesnickelspennies变量。

还有另一个逻辑错误 - 您需要耗尽所有剩余的更改以包含您的便士数。由于您的输出(实际需要的输出)并不强制要求您计算剩余的更改(因为 应为0),您可以完全避免另一个循环并直接指定{{1} } pennies

change

...这将为您留下剩余便士总数的正确结果。

作为一些常规清理,您还希望避免在print语句中进行分配,因为它可能有点令人困惑。请使用pennies = change; 等语句,而不是change -= 25