本篇文章將要介紹一個“自動生成四則運算式”的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
