我正在制作一个计算器小程序并以大多数工作的方式实现它,如果您有多个运算符,计算器会评估您到目前为止所做的事情,例如“4 + 4 + 4 =”将在之后显示8第二个 + 被击中,然后 12 一旦进入是。
我在输入两位数时遇到了一个奇怪的错误,例如“12+12+12”,在第二个 + 被击中后它会显示 24,但是我击中 1,然后是 2,然后 1 会消失并且 2 将被注册为正在添加的内容,使表达式 26 而不是 36。
我在下面包含了一些代码,一个显示了我的评估方法,另一个显示了我在点击 + 时的方法,我希望这是足够的信息。opCounter 检查是否有超过 1 个操作数,如果有,则立即调用 eval 函数进行第一次加法/减法等操作。
一段时间以来,我一直试图弄清楚是什么导致了这个问题,但无法解决。f1 跟踪一个浮点数,f2 跟踪另一个浮点数。tf 是文本框。
if(arg0.getSource()==bplus){
if(parentheses == false){
opCounter++;
if(opCounter < 2){
f1 = Float.parseFloat(tf.getText());
tf.setText("");
}else{
eval();
}
operator= 1;
}else{
tf.setText(tf.getText() + "+");
parenthArg += "+";
opCounter--;
}
}
public void eval(){
if(parentheses == false){
f2 = Float.parseFloat(tf.getText());
if(operator == 1){
tf.setText(Float.toString(f1+f2));
f1 = f1+f2;
}
if(operator == 2){
tf.setText(Float.toString(f1-f2));
f1 = f1-f2;
}
if(operator == 3){
tf.setText(Float.toString(f1*f2));
f1 = f1*f2;
}
if(operator == 4){
tf.setText(Float.toString(f1/f2));
f1 = f1/f2;
}
operator = 0;
System.out.println("f1: " + f1);
System.out.println("f2: " + f2);
}