20165229结对编程练习_四则运算(第二周)

结对编程练习_四则运算(第二周)

参考资料及学习笔记

结对编程练习_四则运算

数据结构应用

需求分析

  • 真分数(题目生成/题目运算判题)

设计思路

1.真分数加法/减法:和/差的分母=两个操作数的分母之积,和/差的分子=第一个操作数的分子乘以第二个操作数的分母+/-第二个操作数的分子乘以第一个操作数的分母。

2.真分数乘法:积的分母=两个操作数之积,积的分子=两个操作数之积。

3.真分数除法:先取除数的倒数,转换成真分数乘法。

4.真分数约分:分子、分母同时除以最大公约数。

代码及注释

  • 加法:
 public fenshu add(fenshu op2)//加法,例如2/3+1/2=(2*2+1*3)/(2*3)
    {
        int commonDenominator = denominator * op2.getDenominator();//和的分母等于分母之积
        int numerator1 = numerator * op2.getDenominator();//第一个数的分子乘以第二个数的分母
        int numerator2 = op2.getNumerator() * denominator;//第二个数的分子乘以第一个数的分母
        int sum = numerator1 + numerator2;//sum和的分子
        System.out.print("(" + this.toString() + ")" + " + " + "(" + op2.toString() + ")" + "=");
        return new fenshu(sum, commonDenominator);//sum分子,commonDenominator分母
    }

  • 减法:
public fenshu subtract(fenshu op2)//减法,例如2/3-1/2=(2*2-1*3)/(2*3)
    {
        int commonDenominator = denominator * op2.getDenominator();//差的分母
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int difference = numerator1 - numerator2;//difference差的分子
        System.out.print("(" + this.toString() + ")" + " - " + "(" + op2.toString() + ")" + "=");
        return new fenshu(difference, commonDenominator);//difference分子,commonDenominator分母
    }

  • 乘法:
 public fenshu multiply(fenshu op2)//乘法,例如(2/3)*(1/2)=(2*1)/(3*2)
    {

        int denom = denominator * op2.getDenominator();//积的分母
        int numer = numerator * op2.getNumerator();//积的分子
        System.out.print("(" + this.toString() + ")" + " * " + "(" + op2.toString() + ")" + "=");
        return new fenshu(numer, denom);//numer分子,denom分母
    }

  • 除法:

 public fenshu divide(fenshu op2)//除法,例如(2/3)/(1/2)=(2*2)/(3*1)
    {
        fenshu op1 = op2.reciprocal();//除数取倒数,转变为乘法
        int numer = numerator * op1.getNumerator();
        int denom = denominator * op1.getDenominator();
        System.out.print("(" + this.toString() + ")" + " / " + "(" + op2.toString() + ")" + "=");
        return new fenshu(numer, denom);
    }

  • 约分:
 private void reduce() {
        if (numerator != 0) {
            int common = gcd(Math.abs(numerator), denominator);//求分子分母的最大公约数
            numerator = numerator / common;
            denominator = denominator / common;//约分
        }
    }

运行过程截图

代码托管地址

码云链接

UML图:

遇到的困难及解决方法

遇到最大的困难就是怎么把这么多变量和方法结合起来,我们采用画图的方法,先把握整体框架,再逐一解决零散的小问题,最后再整合到一起。

对结对小伙伴做出评价

在本次实验当中小夏作出的贡献是巨大的,我提出思想后她都会完美的实现,并纠正一些我的错误。本周我们的行动力有所提升,没有拖拉,及时完成了任务,这是一个很大的进步,希望我们再接再厉共创辉煌,共创美好的明天!谢谢小夏姑娘。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时)
Planning 计划 0.5 0.5
Estimate 估计这个任务需要多少时间 10.5 11.5
Analysis 需求分析 (包括学习新技术) 1.0 0.5
Design Spec 生成设计文档 1.0 1.5
Design Review 设计复审 (和同事审核设计文档) 0.5 0.5
Coding Standard 代码规范 (为目前的开发制定合适的规范) 1.0 1.0
Design 具体设计 1.0 1.5
Coding 具体编码 1.0 2.0
Code Review 代码复审 0.5 0.5
Test 测试(自我测试,修改代码,提交修改) 1 1
Reporting 报告 1.0 1.0
Test Report 测试报告 0.5 0.5
Size Measurement 计算工作量 0.5 0.5
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 1.0 0.5

posted on 2018-04-22 23:38  赵凯杰  阅读(120)  评论(0编辑  收藏  举报

导航