加减乘除混合版
今天又是熬夜的一天
结对作业
211606319 林志强 211606321 刘杰
一、预估与实际
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 20 | 30 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 600 | 679 |
• Design Spec | • 生成设计文档 | 90 | 130 |
• Design Review | • 设计复审 | 30 | 50 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 55 | 75 |
• Design | • 具体设计 | 25 | 35 |
• Coding | • 具体编码 | 44 | 60 |
• Code Review | • 代码复审 | 20 | 30 |
• Test | • 测试(自我测试,修改代码,提交修改) | 15 | 30 |
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 30 | 44 |
• Size Measurement | • 计算工作量 | 15 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 45 |
合计 | 974 | 1228 |
二、需求分析
-
通过查询资料获得以下信息
-
一年级
1 所学内容有一百以内的加减法,结果不会大于100和不存在负数 2 一般都是一步运算
-
二年级
1 加深了在一年纪所学的加减法运算(运算数字加大) 2 开始学习九九乘法表 3 出现除法的余数运算 4 最多的两步混合加减整除运算
-
三年级
1 在一二年级的基础上可以加大一定的数字计算 2 出现多步混合整数运算(包括括号和最多的四步运算)
-
经过分析 我觉得程序应该
1 在运算含除法的混合运算时,除法的结果要是整数,不能含有余数。 2 运算的结果不能有负数出 3 在输出题的时候要出现括号
三、设计
设计思路
- 1 先要设计出含有2~4个随机运算符的式子
- 2 在计算结果的时候要根据乘除法法规则使用括号计算出结果
- 3 除去除数是0的情况和输出的结果符合要求
流程图
实现方案
- 准备工作:先在github上创建仓库,克隆到本地。
- 重要关键点:
逆波兰式的理解以及应用
无括号下的四则运算
四、编码
- 1、创建三个类,分别实现一二三年级的 方法
- 2、使用数组的方式,把符号存入数组随机,实现出现随机的混合运算题目
- 3、使用逆波兰算法来输出已经随机好了的混合运算题目的答案
1、调试日志
- 1、在已经出现混合运算无法进行乘除规则运算
- 2、在混合运算中除法出现余数的处理
2、关键代码
public static void grade_Three() {
System.out.println("题目的数量:");
Scanner n=new Scanner(System.in);
int x=n.nextInt();
int i1[]=new int[x];
int i2[]=new int[x];
int i3[]=new int[x];
int i4[]=new int[x];
int i5[]=new int[x];
String i6[]=new String[x];
String i7[]=new String[x];
String i8[]=new String[x];
int l=0;
String q[]=new String[4];
q[0]="+";
q[1]="-";
q[2]="X";
q[3]="/";
for(int m=0;m<x;m++) {
int a=(int)(1+Math.random()*20);
int b=(int)(1+Math.random()*20);
int a1=(int)(1+Math.random()*20);
int a2=(int)(1+Math.random()*20);
int c=(int)(1+Math.random()*2);
int d=(int)(Math.random()*q.length);
int d1=(int)(Math.random()*q.length);
int d2=(int)(Math.random()*q.length);
i1[m]=a;
i2[m]=b;
i3[m]=a1;
i4[m]=a2;
i5[m]=c;
i6[m]=q[d];
i7[m]=q[d1];
i8[m]=q[d2];
l++;
if(c==0) {
System.out.println(" ("+l+") " + a + " " + q[d] +" " + b + " = ");
}
if(c==1){
System.out.println(" ("+l+") " + a + " "+ q[d] + " " + b + " " +q[d1] + " "+ a1 +" = ");
}
if(c==2){
System.out.println(" ("+l+") " + a + " "+ q[d] + " "+ b + " " +q[d1]+ " " + a1 +" "+ q[d2]+" " + a2 + " = ");
}
}
System.out.println(" ");
int y=0;
for(int z=0;z<x;z++) {
y++;
if(i5[z]==0) {
System.out.println(" ("+y+") " + i1[z] + " " + i6[z] +" " + i2[z] + " = " );
}
if(i5[z]==1){
System.out.println(" ("+y+") " + i1[z] + " "+ i6[z] + " " + i2[z] + " " +i7[z] + " "+ i3[z] +" = ");
}
if(i5[z]==2){
System.out.println(" ("+y+") " + i1[z] + " "+ i6[z] + " "+ i2[z] + " " +i7[z]+ " " + i3[z] +" "+ i8[z]+" " + i4[z] + " = ");
}
}
}
3、代码规范
- 1:不允许任何未经预先定义的常量直接出现在代码中。
- 2:减少代码嵌套层次
- 3:左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
- 4:注意避免使用相同或类似的名字
并人工检查代码是否符合规范
五、测试
开始输入年级并在下一步的情况下输入所需要的题的数目
得到并输出相应年级的相关题目以及答案
六、总结
一周的结队作业已经过去,虽然写的代码还有很多的bug,但是也体会到了团队合作的重要性,从刚开始看到题目的一脸懵逼到一步步的设计完成,在这个过程中学习了很多。过程中发生了许许多多的bug,例如刚和搭档以及问一些大佬,写出了2~4个运算符的混合题目,但是一直求不出答案,本来是用穷举法求答案,但是太过于复杂,容易出错,后来才知道要用逆波兰算法求答案。 在以后的作业会增加自己的独立写代码的能力与时间,去适应现在环境,要多去理解和实践。