我不知道如何得到正确的结果打印出来,也不知道为什么它不给正确的React时,它是。开始的代码是我被告知不要碰的启动代码。
我尝试移动print语句的位置,但它最终只打印了四分之一,其他什么都没有。
import java.util.Scanner;
class Main {
public static void main(String[] args) {
int quarters = 0;
int dimes = 0;
int nickels = 0;
int pennies = 0;
//prompt the user for a monetary input
Scanner sc = new Scanner(System.in);
double changeToGive = 0;
do {
//if the user gave us a negative dollar amount
if(changeToGive < 0)
System.out.println("Dollar amounts must be positive.");
//if the current amount is zero dollars
else if(changeToGive == 0)
System.out.println("How much change do you need to pay out?");
// while the user's input is not a valid double, prompt again
while (!sc.hasNextDouble()) {
System.out.println("Invalid input. How much change do you need to pay out?");
sc.next(); // this is important!
}
//if the user entered a valid double, assign it to changeToGive
changeToGive = sc.nextDouble();
} while (changeToGive <= 0); //if the user entered a valid double but it was negative, do it all again
while (changeToGive > 0){
if (changeToGive >= .25){
changeToGive -= .25;
quarters++;
}else if (changeToGive >= .10){
changeToGive -= .10;
dimes++;
}else if (changeToGive >= .5){
changeToGive -= .5;
nickels++;
}else if (changeToGive >= .1){
changeToGive -= .1;
pennies++;
}
}
System.out.print("Your change is:\n"+quarters+" quarters\n"+dimes+" dimes\n"+nickels+" nickels\n"+pennies+" pennies\n");
}
}
2条答案
按热度按时间mgdq6dx11#
在将
changeToGive
变成int
而不是double
(加上删除少量不必要的代码)之后,您将拥有一个工作解决方案:对于奖励标记,使用
enum
的硬币,每个硬币都有value
字段,而不是硬编码。交给你去调查rmbxnbpk2#
您错误地将 5 cent 和 1 cent 值表示为 0.5 和 0.1,而不是 0.05 和 0.01。
此外,changeToGive 值在您扣除值时发生变化。
这是一个迭代 0.99。
按照 Java 的建议,将 BigDecimal 类用于 currency 应用程序。
这里有一个例子。
输出