Java 计算器GUI问题

Java 计算器GUI问题,java,swing,calculator,Java,Swing,Calculator,我是大学一年级编程的第一学期,我们的任务是制作一个计算器GUI。我几乎完成了,但如果分母为0,但输出为0.0,我需要使“错误”出现。我的另一个问题是,我需要gui在显示最终答案后重新启动,但发生的情况是,在我单击“等于”然后单击数字后,它将继续。所以如果我按1+1,然后单击=,它会输出2,但当我单击一个数字,例如1,它就会变成21 另外,如何删除每个答案末尾的.0?我试着在每一个等式后结束和替换,但它不起作用 @Override public void actionPerformed(Acti

我是大学一年级编程的第一学期,我们的任务是制作一个计算器GUI。我几乎完成了,但如果分母为0,但输出为0.0,我需要使“错误”出现。我的另一个问题是,我需要gui在显示最终答案后重新启动,但发生的情况是,在我单击“等于”然后单击数字后,它将继续。所以如果我按1+1,然后单击=,它会输出2,但当我单击一个数字,例如1,它就会变成21

另外,如何删除每个答案末尾的.0?我试着在每一个等式后结束和替换,但它不起作用

 @Override
public void actionPerformed(ActionEvent e){
    for(int i=0;i<10;i++) {
        if(e.getSource() == numbers[i]) {
            text.setText(text.getText().concat(String.valueOf(i)));
        }
    }
    if(e.getSource()==dec) {
        if (text.getText().contains(".")) {
            return;
        } else {
            text.setText(text.getText() + ".");
        }
    }
    if(e.getSource()==add) {
        num1 = Double.parseDouble(text.getText());
        operator ='+';
        label.setText(text.getText() + "+");
        text.setText("");
    }
    if(e.getSource()==sub) {
        num1 = Double.parseDouble(text.getText());
        operator ='-';
        label.setText(text.getText() + "-");
        text.setText("");
    }
    if(e.getSource()==mult) {
        num1 = Double.parseDouble(text.getText());
        operator ='*';
        label.setText(text.getText() + "*");
        text.setText("");
    }
    if(e.getSource()==div) {
        num1 = Double.parseDouble(text.getText());
        operator ='/';
        label.setText(text.getText() + "/");
        text.setText("");
    }
    if(e.getSource()==neg) {
        Double neg = Double.parseDouble(text.getText());
        neg*=-1;
        text.setText(String.valueOf(neg));
    }
    if(e.getSource()==per) {
        num1 = Double.parseDouble(text.getText())/100;
        label.setText(text.getText() + "%");
        text.setText(String.valueOf(num1));
        label.setText("");
    }
    
    
    if(e.getSource()==equ) {
        num2=Double.parseDouble(text.getText());
        switch(operator) {
        case'+':
            ans=num1+num2;
            break;
        case'-':
            ans=num1-num2;
            break;
        case'*':
            ans=num1*num2;
            break;
        case'/':
            if (num2==0)
                text.setText("Error");
                else
                    ans=num1/num2;
            break;
        }
        label.setText("");
        text.setText(String.valueOf(ans));
    }
    }
    }   
    }
@覆盖
已执行的公共无效操作(操作事件e){
对于(int i=0;i
  • 关于分母为零时显示“错误”的第一个问题。
    当您按下“=”按钮时,首先进入switch(operator)语句的“/”分支。在这里,您检查num2是否等于零,并将文本字段设置为“Error”。但是,在这之后,您退出switch语句并继续执行
    label.setText(“”;
    ,然后是
    text.setText(String.valueOf(ans))
    。由于ans的当前值为零,最后一条语句将文本字段的值设置为“0.0”,覆盖先前的“Error”值。有不同的处理方法。现在,当您了解问题的原因后,您可以尝试自己找到解决方案

  • 关于如何重置计算器的状态。例如,你可以创建一个布尔状态变量,如果计算器已经准备好了新的输入,如果它在一些输入的中间,那么它将是真的。你将这个状态变量初始化为真,然后每次按下某个按钮,你就把它设置成FAL。se.如果状态变量为true,则在向文本字段追加数字之前,将其重置为空字符串。最后,在用户按下“=”按钮后,将状态变量设置回true。因此,您可以执行以下操作:

  • 关于第三个问题,如何在没有不必要的精确性的情况下显示答案。请检查此线程:。那里有您的问题的答案,即使它不是线程中的第一个答案

请注意,您可以在
e.getSource()
上使用开关大小写,而不是在连续的ifs中多次调用它
// We reset the text field to an empty string at the start of each calculation
if (state) { 
  text.setText("");
}

// Here is your code

.....

// And at the very end:
// Change the state to false if user pressed anything except the equality sign
state = e.getSource()==equ;