20165233结对编程项目-四则运算(第二周)

20165233结对编程项目-四则运算(第二周)

码云链接

需求分析

结对编程项目-四则运算(第一周)

设计思路

  • 本周需要实现的功能是可以运算真分数的四则运算,所以每个方法中要对整数与真分数的情况分别进行讨论。
  • add,substract,multiply,divide四个方法中,首先要进行是整数还是真分数的判断。对于真分数,首先利用split()方法,将用户输入的计算符号去掉,即通过+-*÷将输入的式子,把数字分隔出来。再利用indexOf()来判断是否是个分数。随后,利用公式来进行分数的四则运算。以加法为例:加法是通分来进行计算的。比如1/2+1/3,分子是1*3+1*2,分母是2*3,以下是代码实现:
result=simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))
+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1])))
,(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
  • 此时得到的是两个单独的数,即56。上面程序中的simplefraction()就是给计算出的两个数进行约分与添加/的方法。约分的思想是先求出两个数的最大公因子,若是1,就直接添加/;若不是1,则给每个数都除以得出的最大公因子。

代码实现

  • 以加法为例的方法:
public void add(String s)//加法
    {
        String[] str=s.split("\\+");
        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
        {
            String[] str1=str[0].split("[/]");
            String[] str2=str[1].split("[/]");
            if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
            {
                result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))
                        +(Integer.parseInt(str2[0])*Integer.parseInt(str1[1])))
                        ,(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
            }else{
                throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
            }
        }
        else{//整数
            if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
            {
                result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";
            }

            else{
                throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
        }

 }

UML类图

功能截图

  • 此程序有以下几个缺陷:

     - 没有考虑整数除以整数会得出真分数的情况。
     - 没有考虑整数与真分数进行运算的情况。
     - 没有考虑两个以上的数进行运算的情况。
     - 没有考虑添加小括号后运算的优先级的情况。
    
  • JUnit测试

结对感受

  • 本周对程序进行了完善。之前只有对整数的四则运算,而本周添加了对于真分数的四则运算,并可以将结果进行约分的较高级的功能。
  • 我们由于不知道怎么处理真分数中的/,并如何将数字提取出来进行运算,所以借鉴了码云上一位大神的代码。先将算式中的符号与真分数分隔,在通过indexOf把数字提取出来进行通分之类的运算,约分后再将/放回两数之间,这样的代码实现使我和我的小伙伴收获颇多,又掌握了一门新的技能。
  • 在这位大神程序的理解上,我们有效地实现了结对的优点,用纸笔进行推算,并在我不懂的地方,我的小伙伴给我进行讲解,我解决了我的小伙伴看代码中的疑问。

PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 25
Estimate 估计这个任务需要多少时间 120 120
Development 开发 50 60
Analysis 需求分析(包括学习新技术) 50 30
Design Spec 生成设计文档 60 60
Design Review 设计复审(和同事审核设计文档) 30 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 40
Design 具体设计 60 60
Coding 具体编码 35 30
Code Review 代码复审 15 15
Reporting 报告 60 60
Test Report 测试报告 30 45
Size Measurement 计算工作量 20 25
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10 15
合计 620 630
posted @ 2018-04-18 22:43  minchan0624  阅读(196)  评论(1编辑  收藏  举报