0

私は電卓アプレットを作成しており、最も機能する方法で実装しました。複数の演算子がある場合、電卓はこれまでに行ったことを評価します。たとえば、「4 + 4 + 4 =」の後に8が表示されます2 番目の + がヒットし、次に 12 が一度入力されます。

「12+12+12」などの 2 桁の数字を入力すると、奇妙なエラーが発生します。2 番目の + を押すと 24 が表示されますが、1 を押してから 2 を押すと、1 が表示されます。が消えると、2 が追加されるものとして登録され、式は 36 ではなく 26 になります。

以下にいくつかのコードを含めます。1 つは評価メソッドを示し、もう 1 つは + がヒットしたときのメソッドを示しています。これで十分な情報になることを願っています。opCounter は、複数のオペランドがあるかどうかを確認します。ある場合は、すぐに eval 関数を呼び出して、最初の加算/減算などを行います。

しばらくの間、この問題の原因を突き止めようとしてきましたが、うまくいきません。f1 は一方の float を追跡し、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);

}
4

0 に答える 0