今天又是熬夜的一天

结对作业

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的情况和输出的结果符合要求

流程图

加减乘除Java 加减乘除混合运算_Math

实现方案

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