JFrame + JTextField(顯示) + JPanel(GridLayout 按鈕網格)。double firstOperand、String operator、boolean startNewInput。ActionListener,通過 actionCommand 分發。// 數字鍵
if ("0123456789.".contains(cmd)) {
if (startNewInput) { display.setText(cmd); startNewInput = false; }
else display.setText(display.getText() + cmd);
}
// 運算符
else if ("+-*/".contains(cmd)) {
if (!startNewInput) calculate(); // 連續運算
firstOperand = Double.parseDouble(display.getText());
operator = cmd;
startNewInput = true;
}
// 等號
else if ("=".equals(cmd)) {
calculate();
startNewInput = true;
}
// 倒數 1/x
else if ("1/x".equals(cmd)) {
double val = Double.parseDouble(display.getText());
display.setText(String.valueOf(1.0 / val));
}
// 退格
else if ("←".equals(cmd)) {
String txt = display.getText();
if (txt.length() > 0) display.setText(txt.substring(0, txt.length()-1));
}
// 正負號 +/-
else if ("+/-".equals(cmd)) {
String txt = display.getText();
if (txt.startsWith("-")) display.setText(txt.substring(1));
else if (!txt.equals("0")) display.setText("-" + txt);
}
void calculate() {
double second = Double.parseDouble(display.getText());
double result = 0;
switch (operator) {
case "+": result = firstOperand + second; break;
case "-": result = firstOperand - second; break;
case "*": result = firstOperand * second; break;
case "/": result = second != 0 ? firstOperand / second : Double.NaN; break;
}
display.setText(String.valueOf(result));
}
參考博客完整代碼與截圖:Java 計算器實現