我之前发布过这个程序,但发现我通过添加循环而不是它来过度思考它。我把它配对了一点但仍然遇到问题。该程序应该是一个改变机器。在用户输入价格之后,程序应将其四舍五入到最接近的美元,然后输出将分配多少更改以及哪些硬币计数。此时输出完全错误。我对编程非常陌生,而且我很茫然。
package changemachine;
import java.util.Scanner;
import java.text.*;
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter Purchase Price: ");
double price = scan.nextDouble();
int newPrice = (int)(price*100);
int paid = (int)(newPrice+1);
int change = (int)(paid - newPrice);
int quarters = (int)(change/25);
int dimes = (int)((change%25)/10);
int nickels = (int)((change%25%10)/5);
int pennies = (int) (change%25%10%5);
System.out.println("Dispensing: " + quarters + " Quarters,"
+ dimes + "Dimes," + nickels + "Nickels,"
+ pennies + "Pennies.");
System.out.println("Program written by Ashley ");
}
}
答案 0 :(得分:2)
(一旦newPrice
为int
,您就可以停止投射每一行。)而不是将%
链接在一起,它可以更具可读性(并且更不容易出错)您找到的值:
change -= 25*quarters;
dimes = change / 10;
change -= 10*dimes;
nickels = change / 5;
change -= 5*nickels;
pennies = change;
答案 1 :(得分:1)
我认为这可以帮助您了解您是否需要手动完成代码并考虑价格,新价格,付费和变更。
新价格是低于美元的价格。 付费是物品的成本。 更改是您支付的金额减去转换为整数个便士的费用。
package changemachine;
import java.util.Scanner;
import java.text.*;
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter Purchase Price: ");
double price = scan.nextDouble();
int newPrice = (int)(price);
int paid = (int)(newPrice+1);
int change = (int)((paid - price) * 100);
int quarters = (int)(change/25);
int dimes = (int)((change%25)/10);
int nickels = (int)((change%25%10)/5);
int pennies = (int) (change%25%10%5);
System.out.println("Dispensing: " + quarters + " Quarters,"
+ dimes + "Dimes," + nickels + "Nickels,"
+ pennies + "Pennies.");
System.out.println("Program written by Ashley ");
}
}
答案 2 :(得分:0)
如果指令int paid= (int)(newPrice+1) ;
应该舍入到下一个美元,那么它应该是:int paid= ( newPrice + 99 ) / 100 * 100 ;
当两个操作数已经{{1}时,您不需要转换为(int)
}}秒。使您的程序略显难以辨认。之后,按季度获得季度数=更改/ 25; int
更改(that's correct in your program), you can reduce the amount from
更改 - =季度 25;`。
这使得计算with
与dimes
完全相同,只是使用quarters
代替10
。不要忘记使用25
再次减少待处理change
的角钱。您可以使用change-= dimes * 10 ;
重复此过程,其余nickels
将为change
。
如果您有任何疑问,请使用调试器或使用pennies
输出每个中间结果。一旦了解了程序的行为,您就可以随时删除它们。
答案 3 :(得分:0)
这就是我让Java选择我必须支付的硬币的方式。
int temp = m;
int quarterCoin = 25;
int x = m/quarterCoin;
m=m-x*quarterCoin;
int dimeCoin = 10;
int z = m/dimeCoin;
m=m-z*dimeCoin;
int nickelCoin = 5;
int y = m/nickelCoin;
m=m-y*nickelCoin;
int pennyCoin = 1;
int w = m/pennyCoin;
m=m-w*pennyCoin;
答案 4 :(得分:-1)
我没有给你作业的答案/解决方案,而是帮助你弄清楚如何弄明白。 :)
为了充分调试您的软件并排除故障,您需要知道您的变量正在做什么。有两种方法:
所以,如果我试图计算你的程序,我会怎么做:
import java.util.Scanner;
public class Change {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// System.out.println("Enter Purchase Price: ");
double price = 5.65d;//scan.nextDouble();
int newPrice = (int) (price * 100);
System.out.println("newPrice: " + newPrice);
int paid = (int) (newPrice + 1);
System.out.println("paid: " + paid);
int change = (int) (paid - newPrice);
System.out.println("change: " + change);
int quarters = (int) (change / 25);
int dimes = (int) ((change % 25) / 10);
int nickels = (int) ((change % 25 % 10) / 5);
int pennies = (int) (change % 25 % 10 % 5);
System.out.println("Dispensing: " + quarters + " Quarters,"
+ dimes + "Dimes," + nickels + "Nickels,"
+ pennies + "Pennies.");
System.out.println("Program written by Ashley ");
}
}
(注意:我只是手动在price
变量中输入“5.65”而不是使用扫描仪,只是为了节省时间)
产生输出:
newPrice: 565
paid: 566
change: 1
Dispensing: 0 Quarters,0Dimes,0Nickels,1Pennies.
Program written by Ashley
所以,现在你可以看到你的程序出错了。你能发现它吗?