因此,基本上,我正在大学学习Java编程,这是我的第一堂课,现在,我面临挑战,要使用if's和whiles编写一个“ coin sorter”程序。该计划的目的是为它提供一定数量的欧元资金,并且应该以最有效的方式归还它,并优先处理较高价值的票据。我的程序是用葡萄牙语写的一些变量,所以我将解释:(double dinheiro;)是存储金额的变量。然后硬币在代码的int列表中从左到右,从50欧元起,到1美分结束。
该程序运行良好,并且对我创建的所有“欧元”对象执行了应做的工作,其中钱(dinheiro)是整数值(无美分),直到它达到34,50为止,例如只需50美分。例如,它不适用于34,20或34,60或类似的东西。
当我尝试使用这些值运行任何程序时,它不会输出任何错误或类似信息,它只会使程序无限运行而没有任何输出(并最终占用了100%的处理器并导致计算机过热)。
我很累,一直在寻找答案并尝试自己调试,但是我只是无法找到我在这么简单的事情中做错了什么,所以我很沮丧。
谢谢!
public class Euros {
private double dinheiro;
private double n50, n20, n10, n5, m2, m1, m50c, m20c, m10c, m5c, m2c, m1c;
public Euros(double dinheiro) {
this.dinheiro = dinheiro;
}
public void distribuirDinheiro() {
do {
if (dinheiro >= 50) {
dinheiro = dinheiro - 50;
n50 = n50 + 1;
} else if (dinheiro >= 20 && dinheiro < 50) {
dinheiro = dinheiro - 20;
n20 = n20 + 1;
} else if (dinheiro >= 10 && dinheiro < 20) {
dinheiro = dinheiro - 10;
n10 = n10 + 1;
} else if (dinheiro >= 5 && dinheiro < 10) {
dinheiro = dinheiro - 5;
n5 = n5 + 1;
} else if (dinheiro >= 2 && dinheiro < 5) {
dinheiro = dinheiro - 2;
m2 = m2 + 1;
} else if (dinheiro >= 1 && dinheiro < 2) {
dinheiro = dinheiro - 1;
m1 = m1 + 1;
} else if (dinheiro >= 0.5 && dinheiro < 1) {
dinheiro = dinheiro - 0.5;
m50c = m50c + 1;
} else if (dinheiro >= 0.2 && dinheiro < 0.5) {
dinheiro = dinheiro - 0.2;
m20c = m20c + 1;
} else if (dinheiro >= 0.1 && dinheiro < 0.2) {
dinheiro = dinheiro - 0.1;
m10c = m10c + 1;
} else if (dinheiro >= 0.05 && dinheiro < 0.1) {
dinheiro = dinheiro - 0.05;
m5c = m5c + 1;
} else if (dinheiro >= 0.02 && dinheiro < 0.05) {
dinheiro = dinheiro - 0.02;
m2c = m2c + 1;
} else if (dinheiro >= 0.01 && dinheiro < 0.02) {
dinheiro = dinheiro - 0.01;
m1c = m1c + 1;
}
} while (dinheiro > 0);
}
首先,我真的建议您使用运算符缩写,这样您的代码更易于阅读,例如:
dinheiro = dinheiro - 0.5;
可以缩写为:
dinheiro -= 0.5;
关于您的问题,正如@Worthless在评论中说的那样,您切勿对货币操作使用浮点数据类型,因为在测试和计算之间,会损失很多精度,并且对于每一个小数点,如果做得不够,一个双胞胎可以处理的,我建议您阅读BigInteger或BigDecimal类,我建议您阅读this