NetBeans Java计算器查询

NetBeans Java计算器查询,java,netbeans,calculator,helpers,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 = fa

我有一个小问题,就是当我乘以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);


} 
您正在将输入(
5*5
)解析为
Double
,结果是
5
,因为
*5
不是
Double
的一部分

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

你的逻辑正是按照它被告知的去做,然而你真的想要计算一些东西。这将更加困难

5*5*5
的情况下,您的
输入将再次仅为
5

我已经为您的程序解释了为什么
5*5=25
5*5*5=25

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

  • 5*5
    to
    mul(5,5)
  • 5*5*5
    to
    mul(5,mul(5,5))

然后让Java操作支持它来真正计算它。

您的函数
private void btnMultiActionPerformed(Java.awt.event.ActionEvent evt)
每次都在重置textarea。。。因此,无论何时调用它,它只会满足单一值,而不会满足旧结果。。。 从该函数中删除以下行并检查。。。我想这会解决问题的

txtArea.setText(null);

如果您需要每次重置文本区域,那么考虑下面的解决方案… 解决方案:

步骤1:在声明变量
total
时,还需要使用0.0对其进行初始化

第2步:对您的对账单进行以下检查,即
total=input
btn执行的多重操作中
功能

检查:

if (total > 0.0)
            total = total * input;
        else
            total = input;
这肯定能帮你完成任务


悬空指针

问题在于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);
        } 

您需要嵌套乘法或使用ScriptEngine.eval运算符。我找不到位置。。。你正在做的5*5*5。。。与其他情况一样,如果(multi==true){input=Double.parseDouble(txtArea.getText());total=input*total;}只反映乘法,而不反映任何5*5*5…您做得对可能是一些UI问题。更新问题中的完整代码。您是否尝试过我的答案。。。User2964786先生他没有解析5*5,请仔细阅读代码。每次执行操作时,他都会清除txtarea@vels4j所以他第一次解析
5
,然后所有
输入都神奇地消失了。我想我已经说过了,如果我错了,请纠正我。您将输入(5*5)解析为Double,结果是5这是错误的,无法解析字符串5*5。假设你喜欢在计算器里做运算。按5->Press*->Press 5->Press=@vels4j我想他使用的是
JTextArea
,并且有一个
JButton
来计算结果。至少这是他的代码所暗示的。因此,他似乎一次就解析了整个
JTextArea.getText()
。他解析了整个JTextArea.getText()是的,但每次操作他都会清除文本区域。文本区域从来没有像5×5这样的文本,这个解决方案将是错误的,考虑用户第一次来到应用程序的场景…那么total将不等于零,因为它没有初始化,然后它将进入else部分,其中total将与输入相乘,并存储在total中。。。这将导致不稳定和不必要的结果。@DanglingPointer:您错了,它永远不会出错,因为在Java中,double默认初始化为零,请参阅“确定…”。。。但它是由0.0初始化的,因为它是一个双精度值,而不是0。@悬挂指针:你又错了,Java有
,如果其中一个操作数是double类型,另一个将转换为double。
另请参阅。祝您好运,JavaI没有说它会产生任何错误。。。但是在阅读了上面提到的链接之后。。。我写了评论,是的。。。if条件将满足0或0.0。。。