20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

结对伙伴

需求分析

功能要求

1.自动生成题目

  • 可独立使用(能实现自己编写测试类单独生成题目的功能)

  • 可生成不同等级题目,类似于:

    1级题目:2 + 5 =;
    10 - 5 =
    之类的两个数,一个运算符的题目

2.题目运算(判题)

  • 可独立使用

  • 实现中缀表达式转为后缀表达式并计算

  • 判断用户答题正误,并输出正确结果

3.支持真分数

  • 可独立使用

  • 实现分数算式的计算

3.题目去重(扩展需求,加分项)

  • 可独立使用

  • 实现对自动生成表达式的去重:如下

    若生成:2 + 5 =;
    5 + 2 =
    为同一题目

    对需求的理解

    1.要有一个生成随机题目的类,题目中的数可能分数,也可能是整数。 2.要有一个将中缀表达式转化为后缀表达式的类
    3.要有一个计算后缀表达式的类
    4.要有一个判断题目的类
    5.将以上类进行组合写出产品代码

    后续拓展的可能性

    具体的题目去重思路还没有产生,问题应该不大。

    设计思路

  • NML类图
    1332980-20180516003416492-418744210.jpg

  • 思路:
    要有一个能够生成随机最简分数的类,并将它运用到生成随机题目的类中去,同时生成的题目中数字和运算符之间要有一个空格符,方便在转换为后缀表达式的时候使用栈。最后要实现交互,即让客户回答问题,然后系统判断是否正确并告诉客户。

    相关过程截图

  • 生成随机最简分数的类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;
    }
}
  • 生成相应个数表达式的类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;
    }
}

  • 测试类CreateTest运行截图
    1332980-20180501145049242-866119673.png

遇到的困难及解决方法

  • 刚开始编写用于生成整数类型的题目的类时出现逻辑错误,导致运行测试类时出现越界。
  • 错误代码截图如下:
    1332980-20180501150322396-831399841.png

  • 测试类运行结果如下:
    1332980-20180501150404730-1991061221.png

  • 改过后的代码截图如下:
    1332980-20180501150432720-427391143.jpg

  • 错因分析:错误代码中红圈标记的区域便是错误所在,该语句创建了一个空数组,与本意创建一个存放num个String型表达式的数组相违背。从而出现越界的现象。而改过之后的代码中是在构造函数中对数组进行了实例化,也就达到目的了。

对结对的小伙伴做出评价

结对小伙伴黄宇瑭童鞋的优点就是能够很认真的倾听我的一些想法,同时能够对我的想法提出自己的补充建议,而且他非常的耐心,乐于助人,在我敲代码敲累了的时候他会主动帮我接力。缺点的话可能就是在编写代码的时候对自己的要求不够严苛,有时会出现一些输入错误。整体上来说,与黄宇瑭童鞋的结对学习甚是愉快,希望在接下来的结对编程项目中再接再厉,共同进步!!

PSP时间统计

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6070
Estimate估计这个任务需要多少时间3030
Development开发600700
Analysis需求分析 (包括学习新技术)120180
Coding Standard代码规范 (为目前的开发制定合适的规范)3020
Design UML设计项目UML类图6090
Coding具体编码180210
Code Review代码复审180120
Test测试(自我测试,修改代码,提交修改)120120
Size Measurement计算工作量(实际时间3020
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3060
合计14401620

转载于:https://www.cnblogs.com/zhaoxiaohai/p/8976043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值