实现一个命令行程序,要求:
自动生成小学四则运算题目(加、减、乘、除)
统计正确率
本次结对项目要求完成小学生的四则运算,除了题目中要求的内容外,还可以包含以下方面
在开始本周任务前,我对我们的程序进行了简要的分析,和上周相比有如下的改变
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错误,但是一一纠正检验,一起讨论学习的氛围让我觉得十分酣畅,而且成果还是比较让我们满意的,基本完成了预期,希望以后可以继续这样快乐合作,快乐编程。
### 八、预估时间与实际时间
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 |
原文:https://www.cnblogs.com/fzlzc/p/10707481.html