20165201 结对编程练习_四则运算(第一周)
1、需求分析
实现一个命令行程序,要求:
- 自动生成指定数量的小学四则运算题目(加、减、乘、除)
- 支持整数
- 统计正确率
扩展需求:
- 支持多运算符(比如生成包含100个运算符的题目)
- 题目去重
- 支持真分数
- 处理生成题目并输出到文件
- 完成题目后从文件读入并判题
2、设计思路
由于我之前自己写过C语言的小学生计算辅助系统,因此我脑中已经有了大体的框架,只需将想法转换为Java语句,但是我的Java的一些语句掌握的并不是很好,所以第一阶段我只能把程序做的简单一点。
这个程序的核心显然是产生随机数和符号优先级的判定,这一阶段我先做到前者。Java比C语言方便的一点就是,在C语言中,想真正产生随机数往往要用时间作为随机数种子,而Java可以直接调用Random函数,范围可以直接写在后面的括号里。在本程序中,随机数函数不只用来产生要进行运算的数字,还要用来产生随机数进行分支语句的判断,即产生0-3,四个数,来选择产生哪个符号。
在下一阶段我们要实现带括号的多个符号运算等功能。
3、实现过程中的关键代码解释
- 产生两个随机数,有范围限制,小学生做不了太难的题
Random random = new Random();
int num_1 = random.nextInt(20);
int num_2 = random.nextInt(20);
switch-case
分支语句,根据随机情况,调用4种运算
switch (random.nextInt(4)) {
case 0:
result=Jisuan.add(num_1,num_2);
System.out.println(num_1+" + "+num_2);
break;
case 1:
result=Jisuan.sub(num_1,num_2);
System.out.println(num_1+" - "+num_2);
break;
case 2:
result=Jisuan.mul(num_1,num_2);
System.out.println(num_1+" * "+num_2);
break;
case 3:
result=Jisuan.div(num_1,num_2);
System.out.println(num_1+" / "+num_2);
break;
}
- 如果用户输入的答案是正确的,就输出Right,反之输出Wrong,并给出正确答案~
System.out.println("请输入你的答案:");
answer=scanner.nextInt();
if (answer==result) {
System.out.println("Right !!!");
right++;
} else
System.out.println("Wrong !!!
The correct answer is : " + result);
- 有一种特殊情况,如果用户一开始输入的想要做的题目数量是0的话,直接结束程序!
if(num==0) {
System.out.println("答题结束 !!!");
}
else{
System.out.println("答题完毕 !
你的正确率为 :" + accuracy + "%");
}
4、运行过程截图
5、代码托管地址
6、遇到的困难及解决方法
-
问题1:最初生成题目的时候,做了几道都没有出现过除法题,本来我俩都以为只是概率问题,碰巧赶上了而已,然而不论生成多少题,结果还是没有
-
问题1解决方法:我想到我之前在写C语言的小学生计算辅助系统的时候,生成随机数用的是
rand()%n+1
,这里的 n 指的就是想要生成的范围,但是它是从0开始的,所以后面要+1 !果然,下图的那个产生随机数的范围果然少写了一点,将3改为4后,问题解决了~
-
问题2:在进行边界测试的时候,我在输入要做的题目数量处输入了边界值 0 ,结果第一行虽然显示了答题结束,但正确率处出了问题,如下图:
-
问题2解决方法:我们用
if-else
条件语句将这种特殊情况单列出来,代码在此:
if(num==0) {
System.out.println("答题结束 !!!");
}
else{
System.out.println("答题完毕 !
你的正确率为 :" + accuracy + "%");
}
结果如图:
7、PSP |Personal Software Process Stages)
预估耗时(分钟)) | 实际耗时(分钟) |
---|---|
Planning | 计划 |
Estimate | 估计这个任务需要多少时间 |
Development | 开发 |
Analysis | 需求分析 (包括学习新技术) |
Design Spec | 生成设计文档 |
Design Review | 设计复审 (和同事审核设计文档) |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) |
Design | 具体设计 |
Coding | 具体编码 |
Code Review | 代码复审 |
Test | 测试(自我测试,修改代码,提交修改) |
Reporting | 报告 |
Test Report | 测试报告 |
Size Measurement | 计算工作量 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 |
合计 |
8、对结对的小伙伴做出评价(重点指出需要改进的地方)
这次结对学习反映出了很大的问题,最重要的一点就是我们俩的时间经常错开,能坐在一起讨论的机会并不多,也只有晚上。原因是最近的事情太多了,很多事做不完,希望今后事情少的时候能多讨论交流~