題目要求計算器類包含 num1、num2、operator 三個屬性,並根據 operator 動態調用對應運算方法,而非直接鏈式調用 div(mul(50,2),4)。
calculate() 統一入口新增方法 public double calculate(),內部根據 operator 字符分派:
public class Calculator {
public double num1;
public double num2;
public char operator; // '+', '-', '*', '/'
public double calculate() {
switch (operator) {
case '+': return add(num1, num2);
case '-': return subtract(num1, num2);
case '*': return multiply(num1, num2);
case '/':
if (num2 == 0) throw new ArithmeticException("除數不能為零");
return divide(num1, num2);
default: throw new IllegalArgumentException("不支持的運算符: " + operator);
}
}
// 四則運算私有方法
private double add(double a, double b) { return a + b; }
private double subtract(double a, double b) { return a - b; }
private double multiply(double a, double b) { return a * b; }
private double divide(double a, double b) { return a / b; }
public static void main(String[] args) {
Calculator calc = new Calculator();
calc.num1 = 50; calc.num2 = 2; calc.operator = '*';
double step1 = calc.calculate(); // 100
calc.num1 = step1; calc.num2 = 4; calc.operator = '/';
double step2 = calc.calculate(); // 25
calc.num1 = step2; calc.num2 = 2; calc.operator = '>>'; // 需額外實現位移
// 假設實現了位移運算
double result = calc.calculate();
if (result > 30 && result < 60) System.out.println("值大於30且小於60");
else if (result <= 30) System.out.println("值小於或等於30");
else System.out.println("值大於或等於60");
}
}
operator 屬性成為行為決策依據,實現「數據驅動邏輯」。此設計滿足題目「使用運算符屬性」的要求,且結構清晰、易維護。