结对作业
#Pair_211606382吴文清_211606370刘华强
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
• Estimate | • 估计这个任务需要多少时间 | 800 | 815 |
Development | 开发 | 40 | 40 |
• Analysis | • 需求分析 (包括学习新技术) | 30 | 20 |
• Design Spec | • 生成设计文档 | 10 | 10 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 5 | 10 |
• Design | • 具体设计 | 30 | 30 |
• Coding | • 具体编码 | 300 | 400 |
• Code Review | • 代码复审 | 30 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | 10 | 15 |
Reporting | 报告 | 15 | 16 |
• Test Repor | • 测试报告 | 10 | 11 |
• Size Measurement | • 计算工作量 | 5 | 5 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 13 |
合计 | 720 |
二、需求分析
我通过阅读文档的方式了解到,小学三年级数学有如下的几个特点:
--运算符在2~4个【进一步细化要求:至少两个不同的运算符】
--可以加括号
--减法运算的结果不能有负数
--除法运算除数不能为0,不能有余数
三、设计
1. 设计思路
https://files.cnblogs.com/files/wwq123/1.gif
https://files.cnblogs.com/files/wwq123/2.bmp
- 四则运算,生成题目要随机,并且运算符要2-4个不同的
- 解题需要逆波兰算法
- 设置两个栈,一个存数字,一个存符号
- 先写一个输出随机题目的方法,再写一个解决问题的方法,再写一个
判断输入的题数n与grade是否合法的方法。
四、编码
在编码的时候在输出随机的四则题目中卡顿了许久,不指导如何设置2到四个不同符号的题目,如何处理符号与数字的关系,并且不知道如何甚至“(”和“)”的关系。并且在编辑逆波兰解题的过程也是困难重重。并且解题方法中如何判断括号中的数字先运算。
1. 调试日志
在考虑用逆波兰解题的时候,遇到一位数的数字还好,当遇到两位数字以上时,数字存入栈时出现了问题,比如23输入栈会变成2 3;这时候要先定义一个字符串,先把数字存入字符串,字符串分开输入,每输入完整一个数字再通过字符串存入栈。
在除法中除数不能为零,要在除法钱判断除数是否为零
2. 关键代码
if (grade == 3) {
for (i = 1; i <= n; i++) {
int OPNum = (rand.nextInt(3) + 2);//随机生成2到4个运算符
for (int j = 1; j <= OPNum; j++) {
int S_num2 = (rand.nextInt(1000) + 1);//定义一个随机数num2
int op = (rand.nextInt(3));//随机数0123
if (op == 0) {//当随机数为0时,进行加法
if (S_num1 + S_num2 > 1000) {//如果加法运算大于1000;此次运算不算,j--;调回for循环重新输入随机数
j--;
continue;
}
} else if (op == 1) {//如果减法运算小于0;此次运算不算,j--;调回for循环重新输入随机数
if (S_num1 - S_num2 < 0) {
j--;
continue;
}
} else if (op == 2) {//如果乘法运算大于10000;此次运算不算,j--;调回for循环重新输入随机数
if (S_num1 * S_num2 > 100000) {
j--;
continue;
}
} else if (op == 3) {//如果除法运算除数等于0,且有余数;此次运算不算,j--;调回for循环重新输入随机数
if (S_num1 % S_num2 != 0 || S_num2 == 0) {
j--;
3. 代码规范
1谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。
2.[强制]异常不要用来做流程控制,条件控制。
3.[强制] catch时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。
4.[强制]不能使用过时的类和方法。
5.[推荐]不同逻辑、不同语义、不同业务的代码之间插入一个空行分割开来以提升可读性。
6.右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
7.左大括号前不换行。
8.左大括号后换行。
五、测试
1.输入10 0 预期结果:年级不能为零 结果:符合预期
2.输入10 -1 预期结果:年级不能小于零 结果:符合预期
3.输入-10 1 预期结果:题数不能小于0 结果符合预期
六、总结
这次的作业比上一次的作业难度高了不上,由于基础薄弱,对于结对作业没有头绪,并且对第一次作业的体检并不满意,花了大约一两天的时间看别人是如何为完成实验一的,然后就卡在了出题的方法与逆波兰解题的问题上,由于我和我的搭档编程能力都不是很强,我们在思考如何输出题目与解题使花了好久,以及在后面的代码中,深深的感觉十分吃力。
https://files.cnblogs.com/files/wwq123/4.bmp