gpt4 book ai didi

java - 如何修复 "money sorter"java程序

转载 作者:行者123 更新时间:2023-11-30 05:27:41 26 4
gpt4 key购买 nike

所以基本上,我在大学学习用 Java 编码,我已经上了第一个类,现在我面临的挑战是用 if 和 while 制作一个“硬币分类器”程序。该计划的目标是向其提供一定数量的欧元资金,并以最有效的方式组织返还,并优先处理值(value)较高的账单。我的程序是用葡萄牙语编写的一些变量,所以我将解释:(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);
}

最佳答案

首先,我强烈建议您使用运算符缩写,以便您的代码更易于阅读,例如:

dinheiro = dinheiro - 0.5;

可以缩写为:

dinheiro -= 0.5;

至于你的问题,正如@Worthless在评论中所说,你不应该使用 float 据类型进行货币运算,因为在测试和计算之间,会丢失很多精度,而且,你无法为每个做出足够的if double 可以处理的十进制,您应该真正检查一下 BigInteger 或 BigDecimal 类,您可以阅读 here

关于java - 如何修复 "money sorter"java程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com