java 自動生成四則運算式


本篇文章將要介紹一個“自動生成四則運算式”的java程序,在沒有閱讀《構建之法》之前,我已經通過一個類的形式實現了要求的功能,但是當閱讀完成《構建之法》之后,我意識到自己所寫程序的缺點,擴展性差。我通過組合模式對程序進行了修改,解耦合。
可以關注公眾號 HarLearn ,回復“ 自動生成四則運算式 ”,獲取單類實現的源代碼

1. 需求分析

自動生成10道100以內的2個操作數的四則運算算式(+ - * /),要求運算結果也在100以內,把運算式存入“result.txt”文件中。題目數量、數字范圍、操作數和運算規則是可控的。

2. 功能分析

2.1 基礎功能

    題目數量可設置

    可定制操作數

    可設置數字的范圍

    可選擇是否含有乘除

2.2 擴展功能

    可設置計算機結果的范圍

    可以擴展其他運算符

    可以生成帶括號的運算式

3. 設計實現

3.1 類圖

類圖設計
類圖設計

3.2 關鍵方法

生成運算式函數

private String generateArithmetic(Arithmetic arithmetic{
        boolean isBracket = true;
        String arithmatic = RandomNumber.getRandomNumber(arithmetic.getNumberRange(),arithmetic.isNagetive());
        for(int i = 1; i < arithmetic.getNumberOpera(); i++){
            ArithmeticComponent operator = operators.get(Integer.parseInt(RandomNumber.getRandomNumber(operators.size(),false))-1);
            if (operator.isBracket()&&isBracket){
                arithmatic = operator.generateArithmetic(arithmatic);
                isBracket = false;
                i--;
            }else if (!operator.isBracket()){
                arithmatic = operator.generateArithmetic(arithmatic) + RandomNumber.getRandomNumber(arithmetic.getNumberRange(),arithmetic.isNagetive());
                isBracket = true;
            }
        }
        return arithmatic;
    }

生成隨機數方法

public static String getRandomNumber(int numberRange, boolean isNagetive){
        Random randomNum = new Random();
        String randomNumber = "";
        if (isNagetive){
            int number = (randomNum.nextInt(numberRange) +1) * (Math.random() > 0.5 ? -1 : 1);
            if (number < 0){
                randomNumber = "(" + number + ")";
            }else{
                randomNumber = number+"";
            }
            return randomNumber;
        }else{
            return randomNum.nextInt(numberRange) +1 +"";
        }
    }

運行測試

基礎功能測試

基礎功能測試
基礎功能測試

擴展測試

生成帶括號的測試
生成帶括號的測試

總結

通過本篇文章學習了很多,發現了自己在軟件開發中的一些不足,考慮問題的欠缺。希望通過課程的系統的學習,使自己的能力提高。

PSP

PSP
PSP


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM