【问题标题】:Wrong calculation result计算结果错误
【发布时间】:2019-09-20 13:43:35
【问题描述】:

我写了这个短代码,我想让用户输入银行余额。 然后在新的确认对话框中,他们将选择是否要输入交易金额。 如果“是”,那么他们输入正数或负数。 如果输入的值为负数,则程序会从银行余额中减去交易金额。 如果输入的值为正,则程序会将交易值添加到银行余额中。 最后,如果用户在确认对话框中选择“否”按钮,则程序将以计算结果终止! 问题: 当我输入银行余额和交易的数字时,我得到了错误的答案!

我尝试使用 while 循环并执行 while,但我仍然得到错误的结果!

    double total = 0;
    String blc = JOptionPane.showInputDialog(null,"Enter the balance");
    double balance = Double.parseDouble(blc);

    int trcsn = JOptionPane.showConfirmDialog(null,"Transaction: ","",JOptionPane.YES_NO_OPTION);

    while(trcsn == JOptionPane.YES_OPTION){
        String transaction = JOptionPane.showInputDialog(null,"Enter amount:");
        double trc = Double.parseDouble(transaction);
        trcsn = JOptionPane.showConfirmDialog(null,"Transaction: ","",JOptionPane.YES_NO_OPTION);
        if(trc < 0){
            total = balance - trc;
        }else{
            total = balance + trc;
        }
    }
    JOptionPane.showMessageDialog(null,total);

1:我输入 1000 美元作为银行余额。

2:我输入1050(正数)作为交易金额。

3:我输入-500(负值)作为第二次尝试的交易金额。

4: 答案是 1500.00,这是错误的!

1000 + 1050 = 2050.00

2050 - 500 = 1550.00

答案应该是 1550

为什么回答错???

【问题讨论】:

    标签: java


    【解决方案1】:

    在本节中:

        if(trc < 0){
            total = balance - trc;
        }else{
            total = balance + trc;
        }
    

    您正在更新您的总数,而不是余额。从您制作的 sn-p 来看,它保持不变。

    正如@Fildor 在下面的 cmets 中指出的那样,目前您遇到了一个错误,因为您要么将正数相加,要么减去负数 (x - (-y) == x + y) )。要解决此问题,只需将整个 if 块替换为 total = balance + trc。

    您需要更新余额以具有相同的总计值,否则,完全不使用总计并使用余额字段。

    【讨论】:

    • 它也只会添加:对于 trc
    • @Fildor:不确定我是否理解您的评论。
    • 这个 sn-p 永远不会从余额中减去金额。
    • 但这并不是一个次要的改进。事实上,这是错误的。减去负值将添加,添加正值将添加 => 仅在此处添加。
    • @Fildor:哦,我明白你现在的意思了。是的你是对的。我会修改我的答案。
    【解决方案2】:

    您应该执行以下操作:

    String blc = JOptionPane.showInputDialog(null,"Enter the balance");
    double balance = Double.parseDouble(blc);
    
    int trcsn = JOptionPane.showConfirmDialog(null,"Transaction: ","",JOptionPane.YES_NO_OPTION);
    
    while(trcsn == JOptionPane.YES_OPTION){
        String transaction = JOptionPane.showInputDialog(null,"Enter amount:");
        double trc = Double.parseDouble(transaction);
        trcsn = JOptionPane.showConfirmDialog(null,"Transaction: ","",JOptionPane.YES_NO_OPTION);
        balance += trc;
    }
    JOptionPane.showMessageDialog(null,balance);
    

    首先,您需要将 if 语句替换为 += 语句。这是因为trc为负数时相减,trc为正数时相加,相当于每次都加上trc的绝对值,这可能不是你想做的。其次,您需要使用 1 个变量进行平衡,并跟踪随时间的变化。 total 在前面的代码中毫无意义,因为每次执行 if 语句时它都会覆盖自己的值。

    【讨论】:

      【解决方案3】:
          double updatedBalance = (trc < 0) ? balance - trc : balance + trc;
          total = updatedBalance;
      

      就像上面的答案表明你需要更新余额。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-20
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 2021-05-14
        相关资源
        最近更新 更多