结对作业,
学号1:211606308 江东
学号2:211606306 黄柏涛
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | ? 估计这个任务需要多少时间 | 1200 | 1365 |
Development | 开发 | ||
Analysis | ? 需求分析 (包括学习新技术) | 200 | 240 |
Design Spec | ? 生成设计文档 | 60 | 70 |
Design Review | ? 设计复审 | 60 | 70 |
Coding Standard | ? 代码规范 (为目前的开发制定合适的规范) | 80 | 90 |
Design | ? 具体设计 | 80 | 90 |
Coding | ? 具体编码 | 60 | 70 |
Code Review | ? 代码复审 | 20 | 40 |
Test | ? 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 70 | 90 |
Test Repor | ? 测试报告 | 60 | 70 |
Size Measurement | ? 计算工作量 | 20 | 35 |
Postmortem & Process Improvement Plan | ? 事后总结, 并提出过程改进计划 | 50 | 55 |
合计 | 1842 |
二、需求分析
我通过上网的方式了解到,小学三年级数学有如下的几个特点:
- 特点1:两个加数应该在100以内
- 特点2:减法的计算结果不能出现负数
- 特点3:除数不能为0
- 特点4:有余数要打出余数
特点5:小学三年级已经学会了四则运算的加减乘除混合运算以及他的优先级规则
...
三、设计
1. 设计思路
这个程序有三个大的方法构成,分别为show1()与show2()show3()来显示并将小学1,2,3年级计算题目的结果输入到out.txt,之前我们已经完成了1,2年级的出题器,这次主要是初步完成三年级的出题器.
- ...
2. 实现方案
技术关键点
1为了确保输出的两数之和小于100,两数之差大于0,除数不为0,需要设计一些算法
2当两数相减出现负数的时候把两数交换位置避免出现负数,优化了一年级的算术题
3小学三年级数学已经学会了四则运算的优先级规则
- 准备工作:先在Github上创建仓库,克隆到本地,完成后提交。
- 技术关键点:要现在Eclipse先打出代码然后把代码输入到out.txt文件后,要在cmd上运行检测。在基础的代码上还要加入四则运算。
四、编码
通过按照自己的设计方案来写代码,遇到不会的知识点就看小静老师上学期的PPT与作业,上网百度了逆波兰表达式的算法,将我们平常习惯用的中缀表达式改写成后缀表达式来解决运算时的优先级问题
1. 调试日志
- 运用逆波兰公式的时候忘记加入优先级,导致只能按顺序加减乘除,不会出现先乘除后加减的正确结果。
2. 关键代码
private static void Reverse Polish Notation(String[] strArr){
String str = "+-/";
Stack stack = new Stack();
//遍历数组中的每一个元素
for(String s : strArr){
if(!str.contains(s)){
//如果是数字,放入栈中
stack.push(s);
}else{
int a = Integer.valueOf(stack.pop());
int b = Integer.valueOf(stack.pop());
switch(s){
case "+" :
stack.push(String.valueOf(a+b));
break;
case "-" :
stack.push(String.valueOf(b-a));
break ;
case "" :
stack.push(String.valueOf(a*b));
break;
case "/" :
stack.push(String.valueOf(b/a));
break ;
}
}
}
System.out.println(stack.pop());
}
注:这段逆波兰表达式是我百度学习到的,具体出栈入栈的逻辑还是没法完全理解透彻,参考网址https://blog.csdn.net/Willard1314/article/details/71425553
3. 代码规范
- 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。
- 代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
- 类型与中括号紧挨相连来定义数组。
- 代码中命名只能用英文。
四、编码
随机生成数字数组与运算符数组,将数组输出表达式后,上网查找关于逆波兰表达式的算法将运算结果按照算法的优先级运算出来,并输出到文本.在github网站上结对的时候,不知道是校园网的原因还是其他的原因,结队伙伴的邮箱一直收不到搭档邀请的链接,后来我发现可以copy link将邀请链接直接发给搭档,在百度逆波兰算法后,我们两人仍然还是无法理解透彻,用的不是很好,后来在同学的帮忙讲解下终于才完成了这一段的代码编写,属实不容易啊,最后的四则运算输出答案还在努力编写中.
五、测试
六、总结
这一次的实验是在第一次的基础上提升,加入了四则运算与四则运算的优先级的问题,使得代码量就大大的提升,代码过程中遇到了许许多多的问题,截至到今天12点还是没有完成代码的输出,后续会在GITHUB上继续更新的.