首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 計算器類設計:利用運算符屬性動態分派四則運算方法

     編輯:程式設計綜合問答

題目要求計算器類包含 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 屬性成為行為決策依據,實現「數據驅動邏輯」。
  • 每次運算可重新設置三個屬性,模擬鏈式計算過程(50×2→100,100/4→25,25>>2→6)。
  • 異常處理:除零、非法運算符拋出異常,由調用者捕獲。
  • 擴展性強:新增運算符只需在 switch 中增加 case,符合開閉原則。

此設計滿足題目「使用運算符屬性」的要求,且結構清晰、易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved