私は電卓アプレットを作成しており、最も機能する方法で実装しました。複数の演算子がある場合、電卓はこれまでに行ったことを評価します。たとえば、「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);
}