结对编程实验(1李晓冬13、张金伟118)
结队成员
张金伟201521123118
李晓冬201521123113
###本次结对作业是对上一届的程序进行分析,阅读了和运行了作业链接中的一些程序,选择了其中一个非图形界面的四则运算程序。 ###旧程序分析 原程序只能运行两个数字的四则运算,且只能单个符号。我们在这里对此进行了小部分的重构,可以多个数字进行运算,但是仍然还是只是单个运算符号。
分工
- 我和李晓冬共同完成此次代码的修改
程序思维导图
码云上传:
原代码修改:
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(str1[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{//整数
result="0";//输入的第一个数字为result
for(int i=0;i<str.length;i++)
result =Integer.parseInt(result)+ Integer.parseInt(str[i])+""; //从第二个开始累加
}
}
public void substract(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 (s.charAt(0)=='-'){//判断输入的第一个是否为负数
result = "-"+str[1];
for(int i=2;i<str.length;i++){
result = Integer.parseInt(result)-Integer.parseInt(str[i])+"";
}
}
else {result = Integer.parseInt(str[0])+"";
for(int i=1;i<str.length;i++){
result = Integer.parseInt(result)-Integer.parseInt(str[i])+"";}
}
}
}
public void multiply(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[0]),Integer.parseInt(str1[1])*Integer.parseInt(str2[1]));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
result=str[0];//多个数相乘
for(int i=1;i<str.length;i++)
result =Integer.parseInt(result)* Integer.parseInt(str[i])+"";
}
}
public void divide(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(str1[1])*Integer.parseInt(str2[0]));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}else{
if(Integer.parseInt(str[1]) != 0){//整数
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!");}
}else {
throw new IllegalArgumentException("Divisor cannot be zero!"); //除数为零时抛出异常
}
}
}
运行结果:
代码覆盖率测试
结对照片
PSP表格
小结感受
这个实验相对来说不是很难,但是由于代码基础薄弱,前期分工有所不明确,意见有些不合,导致任务进度拖拉,后期慢慢磨合,最后形成了此次的代码的修改,体会到了结对编程的不容易,因为两个人的编程水平较差,未能体会到结对编程的好处,希望在以后的学习中能改善这种情况。