使用JAVA編程語言,獨立完成一個包含3到5個數字的四則運算練習,軟件基本功能要求以下:javascript
2018010230 13+17-1=29 11*15-5=160 3+10+4=1 15/5+3-2=4
Github項目地址:java
需求分析:github
功能設計:express
設計實現:編程
測試運行:dom
核心代碼:編程語言
隨機產生num個運算式,並將產生的運算式存入List集合ide
char[] operator=new char[]{'+','-','*','/'}; Random random=new Random(); ArrayList<String> expression=new ArrayList<String>(); for(int i=0;i<num;i++){ int n=random.nextInt(3)+3; //3-5個運算符 int[] number=new int[n+1]; String ex=new String(); for(int j=0;j<=n;j++){ number[j]=random.nextInt(100)+1; //4-5個數字 } for(int j=0;j<n;j++){ int s=random.nextInt(4);//隨機選擇某個運算符 ex+=String.valueOf(number[j])+String.valueOf(operator[s]);///5+4+6+9 if(s==3){number[j+1]=decide(number[j],number[j+1]);} } ex+=String.valueOf(number[n]); expression.add(ex); }
當被除數不能整除除數時,隨機生成可以整除的除數函數
/** * 隨即取x,y爲1-100之間,x能夠整除y的y值 * @param x * @param y * @return */ private static int decide(int x,int y){//經過遞歸實現整除 Random random=new Random(); if(x%y!=0){ y=random.nextInt(100)+1; return decide(x,y); } else{ return y; } }
經過javascript的eval函數計算字符串內的運算式
/** * 計算每一個等式的結果,並返回運算式 * @param arrayList * @return arrayList */ static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); private static ArrayList<String> calculate(ArrayList<String> arrayList){ ArrayList<String> ArithExpress=new ArrayList<String>(); for(String ax:arrayList){ try { ax=ax+"="+jse.eval(ax); System.out.println(ax); ArithExpress.add(ax); } catch (ScriptException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return ArithExpress; }
總結:
本程序的主要難點在於運算式的隨機生成和運算式的計算,後者藉助於Javascript的eval函數經過求解字符串內的運算式獲得解決,編程重點解決隨機生成運算式部分
PSP:
PSP | 任務內容 | 計劃完成須要的時間(min) | 實際完成須要的時間(min) |
---|---|---|---|
計劃 | 10 | 12 | |
Estimate | 需求分析,函數實現 | 10 | 10 |
開發 | 30 | 30 | |
Analysis | 需求分析 | 5 | 10 |
Design Spec | 設計 | 5 | 5 |
Design Review | 設計複審 | 2 | 2 |
Design | 具體設計 | 5 | 5 |
Coding | 具體編碼 | 20 | 20 |
Code Review | 代碼複審,查找語法錯誤 | 2 | 2 |
Test | 測試 | 5 | 5 |
報告 | 10 | 10 | |
Test Report | 經測試,程序編譯正確,運行結果正確,徹底符合要求 | 2 | 2 |
Size Measurement | 因爲程序功能較爲簡單,需求分析的工做量很小,故本次實驗的主要工做主要在於編程 | 2 | 2 |
Postmortem | 對於此程序,計算部分還有大的改進空間,能夠採用將中綴表達式轉換爲後綴表達式,經過正則判斷運算符優先級來實現算式的結果,而不是另闢他法調用Javascript函數 | 2 | 2 |