20172307 结对编程项目-四则运算 第一周 阶段总结

20172307 结对编程项目-四则运算 第一周 阶段总结

结对对象

  1. 学号:20172311
  2. 姓名:赵晓海
  3. 伙伴第一周博客地址:(http://www.cnblogs.com/zhaoxiaohai/p/8976043.html)
  4. 担任角色:(1)驾驶员:赵晓海
    (2)副驾驶:黄宇瑭

需求分析

  • 生成四则运算的题目,实现题目的分级和分个数。
  • 实现中缀表达式转化成后缀表达式,并计算题目结果,同时与用户输录的答案进行比较。
  • 运算题目中实现真分数的运算。
  • 扩展需求:实现题目的去重。

设计思路

1.UML类图:

2.思路

  • 生成一个生成题目的类,以字符串的形式输出。实现题目的分级,个数通过while,for循环来解决。
  • 中缀转后缀参照老师的PPT,使用栈的方式来实现。
  • 真分数的实现参照书本中的例题RationalNumber来实现。
  • 题目的去重目前还没有思路。

相关过程截图

生成一个最简分数类的Fraction:

    public class Fraction {
       int numerator, denominator;

    public Fraction() {
       numerator= (int) (Math.random()*51);
       denominator= (int) (Math.random()*51);
       if(denominator==0)
           denominator=1;
       reduce();
 }

    public void reduce() {
        if (numerator != 0) {
            int common = gcd(Math.abs(numerator), denominator);

            numerator = numerator / common;
            denominator = denominator / common;
        }
    }

    private int gcd(int num1, int num2) {
        while (num1 != num2)
            if (num1 > num2)
                num1 = num1 - num2;
            else
                num2 = num2 - num1;

        return num1;
    }
    public String getFraction()
    {
        String result;
        if(numerator==0)
            result="0";
        else
            if(denominator==1)
                result=numerator+"";
        else
            result=numerator+"/"+denominator;
        return result;
    }
}

2.生成一个Create类来生成题目:


public class Create {
    String[]Arraylist;
    int num,rate;
    public Create(int num ,int rate)
    {
        this.num=num;
        this.rate=rate;
        Arraylist=new String[num];
    }
    public String questionRate(int a)
    {
        String express="";
        String[]OC={"+","-","×","÷"};

        for (int c=0;c<a;c++) {
            Fraction b = new Fraction();
            String d=b.getFraction();
            String e=OC[(int) (Math.random() * 4)];
            while (d=="0"&&e=="÷") {
                Fraction f=new Fraction();
                d = f.getFraction();

            }
            express +=d+" "+e+ " ";
        }

        Fraction c=new Fraction();
        String e=c.getFraction();
        while (express.charAt(4*rate-1)=='÷'&&e=="0")
        {
            Fraction d=new Fraction();
            e=d.getFraction();
        }

        express+=e+" "+"=";
        return express;
    }
    public  void QuestionNum(){
        Create F=new Create(num,rate);
        for(int a=0;a<num;a++)
            Arraylist[a]=F.questionRate(rate);
    }

    public String[] getArraylist() {
        return Arraylist;
    }
    public String getArraylist2(int a)
    {
        String b;
        b=Arraylist[a];
        return b;
    }

    public String toString() {
        String a="";
        for (int b=0;b<num;b++)
            a+=Arraylist[b]+"\n";
        return a;
    }
}

3.CreatTest类的运行截图

遇到的困难及解决过程

  • 在运行CreateTest时显示存放String类型的数组越界

提示错误处:

  • 解决过程
    和结对伙伴赵晓海同学连续看了好几遍但依然没有看出错误,最后在班主任王老师的指导下明白了问题出在我们在声明那个数组时,没有给他明确的大小,而是用了一个变量,导致数组大小只有1。
    之前代码截图:

更改后代码截图:

对结对伙伴的评价

在这次结对活动中晓海同学是领航员的角色,代码的构想由他来完成,他出的力比我多的多。希望在后面几周的合作中我能帮到他更多吧。

PSP时间统计

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 70
Estimate 估计这个任务需要多少时间 30 30
Development 开发 600 700
Analysis 需求分析 (包括学习新技术) 120 180
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 20
Design UML 设计项目UML类图 60 90
Coding 具体编码 180 210
Code Review 代码复审 180 120
Test 测试(自我测试,修改代码,提交修改) 120 120
Size Measurement 计算工作量(实际时间 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 60
合计 1440 1620
posted @ 2018-05-01 19:29  做作业  阅读(184)  评论(2编辑  收藏  举报