java中计算器小程序的奇怪错误

java中计算器小程序的奇怪错误,java,applet,calculator,Java,Applet,Calculator,我正在制作一个计算器小程序,并以大多数工作方式实现它,如果您有多个运算符,计算器将评估您迄今为止所做的工作,例如“4+4+4=”在第二个+被点击后显示8,然后在输入后显示12 但是,当我使用两位数时,我遇到了一个奇怪的错误,例如“12+12+12”,在第二个+被点击后,它将显示24,但是我点击1,然后点击2,1将消失,2将被注册为正在添加的内容,使表达式变成26而不是36 我在下面包含了一些代码,一个显示了我的求值方法,另一个显示了我在命中+时的方法,我希望这是足够的信息。opCounter检查

我正在制作一个计算器小程序,并以大多数工作方式实现它,如果您有多个运算符,计算器将评估您迄今为止所做的工作,例如“4+4+4=”在第二个+被点击后显示8,然后在输入后显示12

但是,当我使用两位数时,我遇到了一个奇怪的错误,例如“12+12+12”,在第二个+被点击后,它将显示24,但是我点击1,然后点击2,1将消失,2将被注册为正在添加的内容,使表达式变成26而不是36

我在下面包含了一些代码,一个显示了我的求值方法,另一个显示了我在命中+时的方法,我希望这是足够的信息。opCounter检查是否有多个操作数,如果有,则立即调用eval函数执行第一个加法/减法/etc

我一直在试图找出这个问题的症结所在,但还是没能解决。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);

}
if(arg0.getSource()==bplus){
如果(括号==false){
opCounter++;
if(opCounter<2){
f1=Float.parseFloat(tf.getText());
tf.setText(“”);
}否则{
eval();
}
运算符=1;
}否则{
setText(tf.getText()+“+”);
parenthArg+=“+”;
运算计数器--;
}
}
公共无效评估(){
如果(括号==false){
f2=Float.parseFloat(tf.getText());
if(运算符==1){
tf.setText(Float.toString(f1+f2));
f1=f1+f2;
}
if(运算符==2){
tf.setText(Float.toString(f1-f2));
f1=f1-f2;
}
if(运算符==3){
tf.setText(Float.toString(f1*f2));
f1=f1*f2;
}
if(运算符==4){
tf.setText(Float.toString(f1/f2));
f1=f1/f2;
}
运算符=0;
System.out.println(“f1:+f1”);
System.out.println(“f2:+f2”);
}

抱歉,我在过去两个小时里一直在尝试调试,这是我程序中留下的唯一错误。我似乎不明白为什么在有多个运算符之后,它只接受其中一个数字而不是两个数字。这里的信息实在是太少了。您有很多全局变量,如“运算符”、“arg0”,和“parnetheses”,它们在您给出的内容中没有定义。虽然Paul是对的,但这只是数学。使用调试工具,逐行检查每行代码,直到找出问题所在。我的第一印象是,从文本字段中获取字符串时出现问题。“4+4+4”有5个字符长。“12+12”也是5个字符长,之后添加内容时会出现问题。你不应该从文本字段中获取浮点值。只需在内部存储所有数值,并在文本字段中显示副本。这不仅仅是数学问题,还有一个在已经有运算符之后获取2位数字的问题,我不确定为什么它只会abs 1.我不确定是否可以在内部存储所有数字,因为用户可以单击1,2,这需要是12,无论哪种方式,都需要将其放入字符串,然后放入浮点。您可以发布其余代码吗?