NetBeans Java计算器查询

时间:2013-12-10 11:13:38

标签: java netbeans calculator helpers

我遇到一个小问题,即当我乘以例如5 * 5时,答案将是25.但是当乘以5 * 5 * 5时答案仍然会保持25 ..帮助?

变量

public class Calculator extends javax.swing.JFrame {

    double total;
    double input;

    boolean plus = false;
    boolean multi = false;
    boolean division = false;
    boolean minus = false;
}

“乘法”按钮

private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {                                         
    input = Double.parseDouble(txtArea.getText());

    total = input;
    multi = true;
    txtArea.setText(null);
}         

等于按钮

private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {                                          

    if (plus == true )
    {
        input = Double.parseDouble(txtArea.getText());    
        total = input + total;        
    }
    else if (minus == true)
    {
        input = Double.parseDouble(txtArea.getText());        
        total = input - total;
    }
    else if (multi == true)
    {
        input = Double.parseDouble(txtArea.getText());        
        total = input * total;
    }
    else if (division == true)
    {
        input = Double.parseDouble(txtArea.getText());        
        total = input / total;
    } 
    else
    {
    }

    txtArea.setText("" +total);


} 

3 个答案:

答案 0 :(得分:1)

您正在将输入(5*5)解析为Double,其结果为5,因为*5不属于Double。< / p>

然后您将input分配给total。然后,将inputtotal相乘,得到25。

你的逻辑正是按照它所做的去做,但是你想真正计算一些东西。这将更加困难。

如果5*5*5 input5将只是5*5 = 25

我已为您的计划解释了原因5*5*5 = 255*5

解决方案是制作某种解析引擎,其翻译方式如下:

  • mul(5, 5)5*5*5
  • mul(5, mul(5, 5))至{{1}}

然后让它背后的Java操作来真正计算它。

答案 1 :(得分:0)

你的函数private void btnMultiActionPerformed(java.awt.event.ActionEvent evt)每次都会重置textarea ...所以每当你打电话给它时,它只会提供一个值而不会满足旧的结果...... 从此函数中删除以下行并检查...我猜它会解决问题

txtArea.setText(null);

如果您每次都需要重置文本区域,请考虑以下解决方案......

<强>解决方案:

第1步:在声明变量total时,您还需要使用0.0初始化它。

第2步:对您的陈述执行以下检查,即total = input;函数中的btnMultiActionPerformed

检查:

if (total > 0.0)
            total = total * input;
        else
            total = input;

这绝对可以帮到你。

悬空指针

答案 2 :(得分:0)

问题在于 btnMultiActionPerformed 方法中未经检查的分配。

total = input;

因此,每次单击“乘法”按钮时,旧结果都会丢失 检查分配应按如下方式进行:

private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {                                         
            input = Double.parseDouble(txtArea.getText());
            //perform check below, instead of unchecked assignment
            if (total == 0)
                total = input;
            else
                total *= input;
            multi = true;
            txtArea.setText(null);
        }