实现一个命令行程序,要求:java
自动生成小学四则运算题目(加、减、乘、除)git
统计正确率express
本次结对项目要求完成小学生的四则运算,除了题目中要求的内容外,还能够包含如下方面编程
在开始本周任务前,我对咱们的程序进行了简要的分析,和上周相比有以下的改变学习
1 + 2
和 2 + 1
这种重复的状况public int compareValue(char chi) { int number = 0; switch (chi) { case '(': number = 1; break; case '+': case '-': number = 2; break; case '*': case '÷': number = 3; break; case '/': number = 4; break; case ')': number = 5; break; default: number = 0; break; } return number; }
else if (rand == 0 && flag2 % 2 == 0 || flag5 % 3 == 0 && flag2 % 2 == 0 { //插入数字 if(flag6==1) //当产生了分号时 n = num.GetNumber(a-n)+n; //控制分号后面的数比分号前面的数大但不会超过给出的最大值 else n = num.GetNumber(a); q += n; flag2++; flag5 = 0; countTotal++;
Rational div(Rational r) { //除法运算 int a=r.getNumerator(); int b=r.getDenominator(); int newNumerator=numerator*b; int newDenominator=denominator*a; Rational result=new Rational(); if(a==0) { System.out.println("该算式无解"); result.setNumerator(0); } else { result.setNumerator(newNumerator); result.setDenominator(newDenominator); } return result; }
简要说明:这一部分的程序与书上基本相同,但因为书上是控制输入,所以不须要排除分母为0的状况,而咱们的程序中数字时随机产生的,可能会在运算的过程当中产生了计算出的结果是0做为了分母,所以须要控制这种状况测试
多语言选择:在完成这一部份内容时,咱们选择了用抽象类的方法,将每一种提示做为一个抽象方法,三种语言做为子类重写其中的方法编码
package CalculateSystem; public abstract class Language { public abstract String getQuestionNumber(); public abstract String getMaxNumber(); public abstract String getMaxOperator(); public abstract String getInputAnswer(); public abstract String getRight(); public abstract String getWrong(); public abstract String getRate(); public abstract String getContinue(); public abstract String getThanks(); }
下面是子类English中重写的方法命令行
public class English extends Language { public String getQuestionNumber() { return "Enter the number of questions you want to do:"; } public String getMaxNumber() { return "Please enter the maximum number you want to operate:"; } public String getMaxOperator() { return "Please enter the length of the expression you want to operate:"; } public String getInputAnswer() { return "Enter your answer :(floating point)"; } public String getRight() { return "Congratulations! Your answer is right"; } public String getWrong() { return "Wrong answer! The correct answer is"; } public String getRate() { return "Test over! Your accuracy is"; } public String getContinue() { return "Do you want to continue? Please enter 1 to continue and 0 to exit"; } public String getThanks() { return "Test over, thanks for using!"; } }
GetQuestion q = new GetQuestion(); String question1 = q.get(maxnum,maxop); if(question1.equals(question2)) { //判断时候和前一题是否相等,相等则不计入次数,从新产生等式 i--; continue; } System.out.println(question1); question2 = question1; //不相同则把该题目赋值给question2用于和下一题进行比较
13/15
便可,由于在运算过程当中给存在括号优先级的问题,例如 (15*3+8)/16
并不须要在运算过程当中控制都是真分数if-else
语句外,所以只有最开始初始化了变量,在运算过程当中一直使用后面的数覆盖前面的数,所以弹出的两个数会同样,更该方法是将变量的初始化放在else语句中,每次判断时,都要初始化,这样不会对以前的产生影响。while (token.hasMoreTokens()) { temp = token.nextToken(); if (Isop(temp) == 1)//遇到操做符,弹出栈顶的两个数进行运算 { op2 = (Rational) stack.pop(); op1 = (Rational) stack.pop();//弹出最上面两个操做数 result = cal(temp.charAt(0), op1, op2);//根据运算符进行运算 stack.push(result);//将计算结果压栈 } else { Rational num = new Rational(); //每次从新初始化 num.setNumerator(Integer.parseInt(temp)); stack.push(num);//操做数入栈 } }
5/7/8
的形式,事实上这种分数产生的意义不大,咱们但愿避免这种状况,几经尝试后选择在产生问题的类中再加flag变量进行控制
https://gitee.com/fzlzc/java2019/tree/master/src/CalculateSystem设计
我以为个人小伙伴很是棒,这周他主要负责添加真分数功能和语言包,这部分基本由他独立完成,我只负责对接,最后拼接虽然有些磕磕绊绊,有许多没有发现的bug错误,可是一一纠正检验,一块儿讨论学习的氛围让我以为十分酣畅,并且成果仍是比较让咱们满意的,基本完成了预期,但愿之后能够继续这样快乐合做,快乐编程。3d
### 8、预估时间与实际时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
•Estimate | • 估计这个任务须要多少时间 | 570 | 815 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 30 | 40 |
• Design Spec | • 生成设计文档 | 30 | 30 |
• Design Review | • 设计复审 (和同事审核设计文档) | 20 | 40 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20 | 60 |
• Design | • 具体设计 | 20 | 25 |
• Coding | • 具体编码 | 360 | 500 |
• Code Review | • 代码复审 | 20 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 50 |
Reporting | 报告 | ||
• Test Report | • 测试报告 | 20 | 20 |
• Size Measurement | • 计算工做量 | 10 | 10 |
• Postmortem & Process Improvement Plan | • 过后总结, 并提出过程改进计划 | 10 | 20 |
合计 | 570 | 815 |