结对编程实验(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表格

小结感受

这个实验相对来说不是很难,但是由于代码基础薄弱,前期分工有所不明确,意见有些不合,导致任务进度拖拉,后期慢慢磨合,最后形成了此次的代码的修改,体会到了结对编程的不容易,因为两个人的编程水平较差,未能体会到结对编程的好处,希望在以后的学习中能改善这种情况。

posted @ 2018-03-25 21:56  冬冬冬  阅读(246)  评论(4编辑  收藏  举报