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

現代軟件工程實戰:基於 Java 的小學四則運算題自動生成系統(控制台版 + Web 原型)

     編輯:Java 綜合教學

專案背景

課程作業:實現自動生成小學加減乘除題目,後續擴展為 Web/App。技術棧:Java 8、IntelliJ IDEA、Maven、Spring MVC + Bootstrap(Web 版)。代碼託管:GitHub,演示地址:在線演示。

核心演算法設計

1. 表達式結構建模

  • n 個運算符 → n+1 個操作數。
  • 兩類操作數:整數、分數(分子/分母)。
  • 三類運算符模式:+-、*/、+-*/。

2. 隨機生成策略

// 操作數生成
String generateNumber(boolean hasFraction, int min, int max) {
    if (!hasFraction) {
        int num = min + random.nextInt(max - min + 1);
        return (num == 0) ? generateNumber(...) : String.valueOf(num); // 避免 0
    }
    // 分數:分母≠0,1;分子≠0;分子≠分母(避免 1)
    int num, den;
    do {
        num = min + random.nextInt(max - min + 1);
        den = min + random.nextInt(max - min + 1);
    } while (num == 0 || den <= 1 || num == den);
    return num + "/" + den;
}

// 運算符生成
String generateOperator(int mode) { // 0:+- 1:*/* 2:+-*/
    int r = random.nextInt(mode == 2 ? 4 : 2);
    return new String[]{"+", "-", "*", "/"}[r];
}

3. 計算引擎:整數 vs 分數

  • 整數表達式:利用 ScriptEngine (JavaScript) 直接 eval() 字符串,簡潔高效。
  • 分數表達式:不可直接 eval(1/5+2/3 會按整數除法算出 0)。需實現分數四則運算:
    1. 通分:最小公倍數 lcm = a*b/gcd(a,b)。
    2. 運算:加減同分母加減分子,乘除分子分母分別乘除。
    3. 約分:最大公約數 gcd(輾轉相除法/遞歸)。

4. 分數運算核心代碼

public class Fraction {
    static int numera, denomi; // 靜態字段暫存結果

    // 最大公約數(輾轉相除法)
    static int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
    // 最小公倍數
    static int lcm(int a, int b) { return a / gcd(a, b) * b; }

    void add(int n1, int d1, int n2, int d2) {
        int l = lcm(d1, d2);
        numera = n1 * (l/d1) + n2 * (l/d2);
        denomi = l; simplify();
    }
    void sub(int n1, int d1, int n2, int d2) { /* 類似,減法 */ }
    void mul(int n1, int d1, int n2, int d2) {
        numera = n1 * n2; denomi = d1 * d2; simplify();
    }
    void div(int n1, int d1, int n2, int d2) {
        numera = n1 * d2; denomi = d1 * n2; simplify();
    }
    void simplify() { int g = gcd(numera, denomi); numera /= g; denomi /= g; }
}

5. 主流程類 AutoFormula

  • generate(mode, hasFraction, opCount, min, max):組裝表達式字符串,調用計算引擎得出結果。
  • splitFraction(str):解析 "3/4" 或 "5" 為分子分母(整數視為分母=分子)。
  • 支持參數化:運算符模式、是否含分數、題目長度、數值範圍。

技術選型思考(作者視角)

選項評價決策
Python語法極簡,但弱類型不利大型團隊協作與長期維護❌
PHP僅限 Web,難以遷移 Android/桌面端❌
.NET綁定 Windows 生態,Linux 部署受限❌
Java + Spring MVC強類型、成熟生態、跨平台、團隊協作友好、可平滑擴展微服務✅

IDE 選 IntelliJ IDEA:代碼提示無敵(含 CSS/JS/HTML5)、原生 Maven/Gradle、重構神器、開箱即用。

Web 前端原型(Bootstrap)

響應式佈局、卡片式題目展示、AJAX 獲取題目/驗證答案、簡單清爽 UI。截圖見演示地址。

總結與展望

從 Hello World 到幾百行系統,一個月的積累換來工程直覺。代碼寫十遍記不住,再寫十遍。堅持,比聰明更重要。—— 萬世想,天津大學計算機學院,2016.9.9

  • 下一步:引入數據庫持久化題目/用戶進度、Spring Security 認證、RESTful API 設計、React/Vue 前端重構、Docker 容器化部署。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved