我试图获得满足规定变化量(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
答案 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);
答案 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;
这是因为change
和25
是int
s,所以/
会进行整数除法。它将给出适合变化的最大数量的季度,即它的四舍五入。
更进一步,您还可以使用%
模运算符来获取每个步骤的剩余更改:
quarters = change / 25;
change = change % 25;
dimes = change / 10;
change = change % 10;
nickels = change / 5;
change = change % 5;
答案 2 :(得分:0)
主要问题是您正在使用的变量。您应该在适当的位置使用quarters
,dimes
,nickels
和pennies
变量。
还有另一个逻辑错误 - 您需要耗尽所有剩余的更改以包含您的便士数。由于您的输出(实际需要的输出)并不强制要求您计算剩余的更改(因为 应为0),您可以完全避免另一个循环并直接指定{{1} } pennies
:
change
...这将为您留下剩余便士总数的正确结果。
作为一些常规清理,您还希望避免在print语句中进行分配,因为它可能有点令人困惑。请使用pennies = change;
等语句,而不是change -= 25
。