结对作业

#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

原文地址:https://www.cnblogs.com/wwq123/p/9672410.html