我正在学习 Java,我的第一个项目是计算器,但是我遇到了障碍。我试图让我的计算器让我输入一个数字,然后单击一个运算符(+、-、x、/),输入另一个数字,然后再次点击一个运算符并让显示更新并能够继续进行。
例如,我希望能够点击以下内容,并在每次点击操作员后显示总数:
a + b / c - d =
我拥有的代码(对我而言)似乎应该可以工作,但事实并非如此。我究竟做错了什么?
以下是我在点击运算符时使用的代码。默认情况下,等待设置为 false。运行完该类一次后, 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 语句。即使在此之后,同样的问题仍然存在。此外,完整的源代码可在此处获得