结对编程练习_四则运算(第二周)
参考资料及学习笔记
需求分析
- 真分数(题目生成/题目运算判题)
设计思路
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 |