java實現隨機四則運算

使用JAVA編程語言,獨立完成一個包含3到5個數字的四則運算練習,軟件基本功能要求以下:javascript

  • 程序可接收一個輸入參數n,而後隨機產生n道加減乘除練習題,每一個數字在 0 和 100 之間,運算符在3個到5個之間。
  • 爲了讓小學生獲得充分鍛鍊,每一個練習題至少要包含2種運算符。同時,因爲小學生沒有分數與負數的概念,你所出的練習題在運算過程當中不得出現負數與非整數,好比不能出 3/5+2=2.6,2-5+10=7等算式。
  • 練習題生成好後,將你的學號與生成的n道練習題及其對應的正確答案輸出到文件「result.txt」中,不要輸出額外信息,文件目錄與程序目錄一致。
  • 當程序接收的參數爲4時,如下爲輸出文件示例。
2018010230
13+17-1=29
11*15-5=160
3+10+4=1
15/5+3-2=4

Github項目地址:java

https://github.com/dushik/Athmeticgit

需求分析:github

  • 經過程序接受一個數字,產生N道加減乘除練習題。
  • 判斷傳入參數是否合法
  • 每一個數字在0-100之間,運算符3-5個
  • 運算過程不能出現負數和非整數
  • 計算練習題
  • 全部信息輸出到txt文件

功能設計:express

  • 編寫主函數
  • 編寫輸入是否合法函數
  • 隨機生成運算式
  • 編寫計算運算式函數
  • 結果寫入txt輔助類

設計實現:編程

  • 編寫主函數並經過命令行接收參數
  • 判斷傳入參數是否合法
  • 隨機選擇加減乘除運算符
  • 根據產生運算符的個數生成必定運算數的運算式並存入List集合
  • 當隨機產生的運算符是「/」時,判斷被除數是否能整除除數,若是不能,隨機產生可以被整除的除數。
  • 遍歷List集合經過函數計算集合中每一個運算式的結果
  • 編寫寫入txt文件函數

測試運行: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
相關文章
相關標籤/搜索