以 JApplet/JFrame 雙模式實作標準計算機,支援四則運算、平方根、倒數、百分比、正負號切換、退位鍵、清除/全部清除、記憶體(MC/MR/MS/M+)完整功能。介面採 GridLayout 矩陣排列,顏色區分數字鍵(藍)與功能鍵(紅),可直接編譯執行。
private final String[] KEYS = {
"7","8","9","/","sqrt",
"4","5","6","*","%",
"1","2","3","-","1/x",
"0","+/-",".","+","="
};
private final String[] COMMAND = {"Backspace","CE","C"};
private final String[] M = {" ","MC","MR","MS","M+"};
private boolean firstDigit = true;
private void handleNumber(String key) {
if (firstDigit) display.setText(key);
else if (key.equals(".") && display.getText().indexOf(".") < 0)
display.setText(display.getText() + ".");
else if (!key.equals("."))
display.setText(display.getText() + key);
firstDigit = false;
}
private double number = 0.0;
private String operator = "=";
private void handleOperator(String key) {
double displayVal = getNumberFromDisplay();
switch (operator) {
case "/": if (displayVal == 0) { showError("除數不能為零"); return; }
number /= displayVal; break;
case "1/x": if (number == 0) { showError("零沒有倒數"); return; }
number = 1 / number; break;
case "+": number += displayVal; break;
case "-": number -= displayVal; break;
case "*": number *= displayVal; break;
case "sqrt": number = Math.sqrt(number); break;
case "%": number /= 100; break;
case "+/-": number *= -1; break;
case "=": number = displayVal; break;
}
// 整數顯示優化
long l = (long) number;
display.setText((number - l == 0) ? String.valueOf(l) : String.valueOf(number));
operator = key;
firstDigit = true;
}
// 頂列:指令鍵 (Backspace, CE, C)
JPanel command = new JPanel(new GridLayout(1,3,3,3));
// 中列:數字/運算鍵 4x5
JPanel calckeys = new JPanel(new GridLayout(4,5,3,3));
// 左列:記憶體鍵 5x1
JPanel calms = new JPanel(new GridLayout(5,1,3,3));
// 組合
JPanel panel1 = new JPanel(new BorderLayout(3,3));
panel1.add(command, BorderLayout.NORTH);
panel1.add(calckeys, BorderLayout.CENTER);
JPanel top = new JPanel(new BorderLayout());
top.add(display, BorderLayout.CENTER);
getContentPane().setLayout(new BorderLayout(3,5));
getContentPane().add(top, BorderLayout.NORTH);
getContentPane().add(panel1, BorderLayout.CENTER);
getContentPane().add(calms, BorderLayout.WEST);
init() 自動建構介面、註冊監聽器。main() 建立 JFrame、加入 Calculator 實例、設定視窗屬性。javac Calculator.java
# Applet 模式
appletviewer Calculator.html
# 應用程式模式
java Calculator
ScriptEngineManager (JavaScript) 實現運算式解析,取代手寫邏輯。KeyBinding) 支援實體鍵盤輸入。BigDecimal 解決浮點數精度問題。