如何修复“货币分类器” java程序

问题描述 投票:0回答:1

因此,基本上,我正在大学学习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);
    }
java currency
1个回答
0
投票

首先,我真的建议您使用运算符缩写,这样您的代码更易于阅读,例如:

dinheiro = dinheiro - 0.5;

可以缩写为:

dinheiro -= 0.5;

关于您的问题,正如@Worthless在评论中说的那样,您切勿对货币操作使用浮点数据类型,因为在测试和计算之间,会损失很多精度,并且对于每一个小数点,如果做得不够,一个双胞胎可以处理的,我建议您阅读BigInteger或BigDecimal类,我建议您阅读this

© www.soinside.com 2019 - 2024. All rights reserved.