加减乘除混合版

今天又是熬夜的一天

结对作业

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个运算符的混合题目,但是一直求不出答案,本来是用穷举法求答案,但是太过于复杂,容易出错,后来才知道要用逆波兰算法求答案。 在以后的作业会增加自己的独立写代码的能力与时间,去适应现在环境,要多去理解和实践。

posted @ 2018-09-19 11:14  夜下独酌  阅读(309)  评论(1编辑  收藏  举报