私はJavaを学んでいる途中で、最初のプロジェクトは電卓ですが、問題が発生しました。電卓で数値を入力してから演算子(+、-、x、/)をクリックし、別の数値を入力してからもう一度演算子を押すと、表示が更新され、これを続行できるようになります。
たとえば、次をヒットして、最初の後にオペレーターをヒットするたびに合計を表示できるようにしたいと思います。
a + b / c --d =
私が持っているコードは(私には)機能するはずのように見えますが、機能しません。私は何が間違っているのですか?
以下は、オペレーターをヒットしたときに使用しているコードです。デフォルトでは、待機はfalseに設定されています。クラスを1回実行した後、value1が保存され、waitがtrueに設定され、正常に機能します。そこからは、正しく機能していないようです。
class OperatorListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
// Set display as string
String s = display.getText();
if (!wait) {
// Convert first input string to double
try {
value1 = Double.valueOf(s.trim()).doubleValue();
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
}
dec = false;
} else {
// Convert second input string to double
try {
value2 = Double.valueOf(s.trim()).doubleValue();
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
}
// Determine operation to be performed
if (operator == "add") {
value1 = Operators.add(value1, value2);
} else if (operator == "subtract") {
value1 = Operators.subtract(value1, value2);
} else if (operator == "multiply") {
value1 = Operators.multiply(value1, value2);
} else if (operator == "divide") {
value1 = Operators.divide(value1, value2);
}
// Convert final value to string and display
display.setText(Double.toString(value1));
dec = false;
}
// Determine operator hit
if (input.equals("+")) {
operator = "add";
} else if (input.equals("-")) {
operator = "subtract";
} else if (input.equals("x")) {
operator = "multiply";
} else if (input.equals("/")) {
operator = "divide";
}
// Set wait
wait = true;
}
}
編集:いくつかの混乱を修正し、ifステートメントを更新するためにコードを更新しました。この後も同じ問題が存在します。また、完全なソースはここから入手できます