嗨,我是一名年轻的程序员,我的计算器需要一些帮助。每次我试图得到它太计算它一直给我错误的答案,例如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("");
}
}
}
答案 0 :(得分:0)
在这一行,
int rounding= (int) Math.round(a+b);
在设置新的a和b值之前,您要设置舍入值。您需要在>>之后调用设置新的a和b值,否则舍入值将无法正确更新。
您还有两个启动块:else if (getbuttonlabel.equals("="))
。每次getbuttonlabel等于“=”时,都会执行这两个块的,所以如果你试图添加两个数字,第二个块将始终覆盖第一个块的结果,所以会发生什么在第一个块中添加两个数字,然后在第二个“=”块中,从第一个数字中减去两个数字的总和,从而得到第二个数字的负值作为结果。
要在不完全更改程序设计的情况下解决此问题,您可以在类(而不是函数)中添加一个变量,该变量存储上一个操作是+还是 - 。然后在函数中,在处理“=”块之前检查它。这样,只有正确的“=”块才会在调用函数时运行。