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类图

1047221-20180418224212488-32801431.png

功能截图

1047221-20180418224232145-1353270625.png

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

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

1047221-20180418224247219-1756574052.png

结对感受

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

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3025
Estimate估计这个任务需要多少时间120120
Development开发5060
Analysis需求分析(包括学习新技术)5030
Design Spec生成设计文档6060
Design Review设计复审(和同事审核设计文档)3020
Coding Standard代码规范 (为目前的开发制定合适的规范)2040
Design具体设计6060
Coding具体编码3530
Code Review代码复审1515
Reporting报告6060
Test Report测试报告3045
Size Measurement计算工作量2025
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划1015
合计620630

转载于:https://www.cnblogs.com/minchan0624/p/8878129.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值