好的,所以我需要编写一个程序来询问我要多少钱,然后我需要它告诉我最少需要多少硬币才能做到。我可以使用的硬币有:美元、25 美分、10 美分、镍币和便士。例如,当我运行该程序时,它应该看起来像这样:
> run Coins
Enter the amount of given money:
[1.73]
Give the seller 8 coins:
1 dollars,
2 quarters,
2 dime,
0 nickels,
3 pennies.
这是我目前所拥有的:
import java.util.Scanner;
class Coins {
public static void main (String args[]) {
Scanner input = new Scanner(System.in);
double money;
System.out.println("Enter the amount of money ");
money = input.nextDouble();
while (money > 0.0 ){
if (money >= 1) {
System.out.println(money/1+"dollars");
money -= 1;
}
else if (money>=.25) {
System.out.println(money/.25+"quarters");
money-=.25;
}
else if (money>=.10) {
System.out.println(money/.10+"Dimes");
money-=.10;
}
else if (money>=.05) {
System.out.println(money/.05+"Nickels");
money-=.05;
}
else if (money>=.01) {
System.out.println(money/.01+"Penny");
money-=.01;
}
}
}
}
我需要帮助的部分是:如果我运行该程序并输入金额 1.73,按照我编写代码的方式,它会将数字 1.73 除以 1,然后打印“1.73 美元”。我需要一种方法来去掉小数部分,而不是打印“1.73 美元”,而是打印“1 美元”。但我不确定该怎么做。我尝试将其转换为 int,但它扰乱了其他语句的流程。请帮助我。
最佳答案
您应该结合使用 floor
和转换为 double
,以下代码有效:
class Coins {
public static void main (String args[]) {
double money = 1.73;
while (money > 0.0 ){
if (money >= 1) {
System.out.println(Math.floor(money/1)+" dollars");
money -= Math.floor(money/1)*(double)1;
}
else if (money>=.25) {
System.out.println(Math.floor(money/.25)+" quarters");
money-=Math.floor(money/.25)*(double).25;
}
else if (money>=.10) {
System.out.println(Math.floor(money/.10)+" Dimes");
money-=Math.floor(money/.10)*(double).10;
}
else if (money>=.05) {
System.out.println(Math.floor(money/.05)+" Nickels");
money-=Math.floor(money/.05)*(double).05;
}
else if (money>=.01) {
System.out.println(Math.round(money/.01)+" Penny");
money-=Math.round(money/.01)*(double).01;
}
}
}
}
你遇到的另一个错误:
你应该减去 Math.floor(money/XXX)*(double)XXX
而不是 (double)XXX
关于java - Java中的最小变化贪婪算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488407/