我的计算器无法正确计算java

时间:2015-11-09 01:09:59

标签: java swing calculator

嗨,我是一名年轻的程序员,我的计算器需要一些帮助。每次我试图得到它太计算它一直给我错误的答案,例如2 + 2将等于-2。有人可以帮帮我吗。顺便说一下,我正在从书中学习代码,这样有人可能会认出一些代码。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class CalculationEngine implements ActionListener{

String number1, number2, abplus,abminus,abEquals1;
double a,b,a2,b2;
int rounding,rounding2;


//Don't change this!
Calculator c2;
//Or this.
CalculationEngine(Calculator c2){
    //This statement allows this class to "communicate" with the other class
    this.c2=c2;
}

@Override
public void actionPerformed(ActionEvent e) {

    JButton getbutton=(JButton) e.getSource();

    String getbuttonlabel= getbutton.getText();
    String buttonsfieldtext=c2.getbuttonsfield();

    c2.setbuttonsfieldtext(buttonsfieldtext+getbuttonlabel);

    number1=buttonsfieldtext;
    number2=buttonsfieldtext;

    try{
        if(getbuttonlabel.equals("+")){
            a=Double.parseDouble(number1);
            c2.setbuttonsfieldtext("");
        }else if (getbuttonlabel.equals("=")){
            b=Double.parseDouble(number2);
            rounding= (int) Math.round(a+b);
            abplus=String.valueOf(rounding);
            c2.setbuttonsfieldtext(abplus);

        }

    }catch(NumberFormatException e1){
        System.out.println("There was an error in your typing "+e1.getMessage());
        c2.setbuttonsfieldtext("");
    }

    try{
        if(getbuttonlabel.equals("-")){
            String number3=buttonsfieldtext;
            a2=Double.parseDouble(number3);
            c2.setbuttonsfieldtext("");
        }else if (getbuttonlabel.equals("=")){
            String number4=buttonsfieldtext;
            b2=Double.parseDouble(number4);
            rounding2= (int) Math.round(a2-b2);
            abminus=String.valueOf(rounding2);
            c2.setbuttonsfieldtext(abminus);

        }

    }catch(NumberFormatException e1){
        System.out.println("There was an error in your typing "+e1.getMessage());
        c2.setbuttonsfieldtext("");
    }




}

}

1 个答案:

答案 0 :(得分:0)

在这一行,

int rounding= (int) Math.round(a+b);

在设置新的a和b值之前,您要设置舍入值。您需要在>之后调用设置新的a和b值,否则舍入值将无法正确更新。

您还有两个启动块:else if (getbuttonlabel.equals("="))。每次getbuttonlabel等于“=”时,都会执行这两个块的,所以如果你试图添加两个数字,第二个块将始终覆盖第一个块的结果,所以会发生什么在第一个块中添加两个数字,然后在第二个“=”块中,从第一个数字中减去两个数字的总和,从而得到第二个数字的负值作为结果。

要在不完全更改程序设计的情况下解决此问题,您可以在类(而不是函数)中添加一个变量,该变量存储上一个操作是+还是 - 。然后在函数中,在处理“=”块之前检查它。这样,只有正确的“=”块才会在调用函数时运行。