20172319 2018.04.23-05.02
结对编程练习_四则运算
第一周阶段性总结
目录
结对对象:
- 20172316赵乾宸(驾驶,领航员)
- 20172319唐才铭(驾驶,领航员)
- 20172319王文彬(驾驶,领航员)
需求分析:
1.项目内容
以结对小组形式编写代码,实现以下功能:
1.自动生成题目
可独立使用(能实现自己编写测试类单独生成题目的功能)
可生成不同等级题目,类似于:
1级题目:2 + 5 =
10 - 5 =
之类的两个数,一个运算符的题目
2.题目运算(判题)
可独立使用
实现中缀表达式转为后缀表达式并计算
判断用户答题正误,并输出正确结果
3.支持真分数
可独立使用
实现分数算式的计算
4.题目去重(扩展需求,加分项)
可独立使用
实现对自动生成表达式的去重:如下
若生成:2 + 5 =
5 + 2 =
为同一题目
2.理解:
- 能随机生成n道四则运算题目,n由用户输入
- 支持整数和分数
- 支持多运算符,运算符个数n可由用户输入
- 能够判断正误,错误时能提醒并输出正确答案
- 可以计算正确率
设计思路:
- 由于分工的不同,个人独立完成项目的各个部分,我负责的是支持真分数部分;
- 两个分数进行运算,题目还得是随机的,必须考虑每一个的分子分母都是随机的,因此设置了四个变量每一个变量相应的从(-50)——(50)之间取随机数
- 声明一个String类变量用以判断并输出运算符
switch (e) // 运算符号
{
case 0:
s1 = " + ";
break;
case 1:
s1 = " - ";
break;
case 2:
s1 = " × ";
break;
case 3:
s1 = " ÷ ";
break;
}
然后toString输出等式
s2 = numerator1/denominator1 + s1 + numerator2/denominator2 + " = ";
然而遇到了问题,输出的东西虽然是分数,但并不满足
真分数,为了保证分数运算是真分数
while (true) {
numerator1 = generactor.nextInt(51) - 50;
denominator1 = generactor.nextInt(51) - 50;
numerator2 = generactor.nextInt(51) - 50;
denominator2 = generactor.nextInt(51) - 50;
e = (int)(Math.random()*4);
a = numerator1;
b = denominator1;
c = numerator2;
d = denominator2;
if (numerator1 >= denominator1 || numerator2 >= denominator2||denominator1==0||denominator2==0||numerator2==0) // 保证真分数(分子分母不为0,分子小于分母)
continue;
else {
do {
h = a % b;
i = c % d;
a = b;
c = d;
b = h;
d = i;
} while (h != 0 && i != 0);
}
运用了辗转相除法,保证分子与分母互质,从而保证
真分数
- 类图:
结对评价:
- 虽然彼此都有驾驶与领航,但只是某些方面的合作,个人的编码风格以及代码没有注释,导致有时候并不能看懂伙伴写的是什么,各个目的都可以单独实现,但暂时还没有连成一个整体。
PSP:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
Estimate | 估计这个任务需要多少时间 | 100 | 100 |
Development | 开发 | 800 | |
Analysis | 需求分析 (包括学习新技术) | 100 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
Design UML | 设计项目UML类图 | 50 | 30 |
Coding | 具体编码 | 30 | |
Code Review | 代码复审 | 50 | |
Test | 测试(自我测试,修改代码,提交修改) | 30 | |
Size Measurement | 计算工作量(实际时间 | 30 | |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | |
合计 | 1240 |