【发布时间】:2019-10-03 21:26:03
【问题描述】:
所以基本上,我在大学里学习用 Java 编码,我已经上了第一堂课,现在我面临挑战,用 if 和 while 制作一个“硬币分类器”程序。 该计划的目标是给它一笔以欧元为单位的钱,它应该以最有效的方式归还它,优先考虑更高价值的钞票。 我的程序是用葡萄牙语编写的一些变量,所以我将解释: (double dinheiro;) 是我存储金额的变量。 然后硬币在代码的 int 列表中从左到右移动,从 50 欧元纸币开始,到 1 美分结束。
该程序运行良好,并且对我创建的所有“欧元”对象执行它应该做的事情,其中钱(dinheiro)是一个 int 值(没有美分),直到它像 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);
}
【问题讨论】:
-
您需要阅读浮点数以及为什么不应该用它来赚钱。快速检查 jshell 会告诉您第一个操作会导致什么结果。 jshell> 34.20 - 20 $1==> 14.200000000000003 看到问题了吗?
-
抱歉,这个问题可能太大了,但什么是浮点数? double 是浮点数吗?在那种情况下,我应该使用什么样的变量?并且因为值变得太大而不起作用?
-
为什么使用无限循环而不是 if(denheiro >0)。在 Do-while 循环中,即使 while 为 false ,也会在 Do 完成后检查 While,但只检查一次。你必须小心无限循环
-
@GipsyKing 你的情况和他一样。问题是你永远不应该依赖浮点值的精确结果。这会导致无限循环!
-
好的,所以现在我在 while 之前放置了一个 if(dinheiro > 0),将 do-while 替换了一段时间并替换了 while 条件,而不是 while(dinheiro > 0) 到 while(迪涅罗 >= 0.01)