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])));
- 此时得到的是两个单独的数,即
5
和6
。上面程序中的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 |