使用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 |