1.链接

结对成员:

201521123025林振斌 http://www.cnblogs.com/myfist
201521123030周汉麟 http://www.cnblogs.com/lamfinethinkyou/
码云链接:
201521123025 https://gitee.com/mayunlzb/software_engineering
201521123030 https://gitee.com/iamfinethinkyou/pair_programming__four_operations
类图

2.功能改进与扩展

1.需求分析:针对现有代码的改进分析,新开发功能的分析

  • 实现简单的加减乘除算术出题运算,增添更多功能。
    发现原代码问题:分数加法无法计算正确,除法部分功能出错。

添加功能:添加乘方运算和开根号运算

核心代码展示

if(s.indexOf("^")>-1){ 
        	int i=s.indexOf("^");            
            if(s.indexOf("^",i+1)==i+1){           
            	throw new IllegalArgumentException("Input error! Don't like 1^^1");//格式错误时抛出异常
               }else{
            	   pow(s);
               } 
        }
        if(s.indexOf("√")>-1){
        	int i=s.indexOf("√");            
            if(s.indexOf("{",i+1)==i+1){           
            	throw new IllegalArgumentException("Input error! Don't like 1√√1");//格式错误时抛出异常
               }else{
            	   sqrt(s);
               } 
        }

public void sqrt(String s)       //开根
    {	int i1=s.indexOf("√")+1;
    	String str=s.substring(i1); 	 
     	if(Integer.parseInt(str)>=0)    	 
                {
     			 double a=Integer.parseInt(str);    		
                 result = Math.sqrt(a) +"";                 
      	    	  }       	            
            else{
         	   throw new IllegalArgumentException("overrun!");//数值范围超出时抛出异常
            }         
		
	}
    
    public void pow(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)//分母不为零
         	{
         		int a1=Integer.parseInt(str1[0]);
         		int a2=Integer.parseInt(str1[1]);
         		int b=Integer.parseInt(str[1]);
         		double r1=Math.pow(a1, b);
         		double r2=Math.pow(a2, b);
         		result =simplefraction((int)r1,(int)r2);
         	}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)
     	 
                 {int a=Integer.parseInt(str[0]);
                  int b=Integer.parseInt(str[1]);                
                  result = Math.pow(a,b) +"";
                 
      	    	  }       	            
            else{
         	   throw new IllegalArgumentException("overrun!");//数值范围超出时抛出异常
            }         
	   }
    }    

运行截图

JUnit单元测试






3.在两人合作的过程中, 请看下面的内容

满足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
请重视这点,在开发时两个人要有口头上的沟通:“好的,我们一起在开发中遵守一起认可的编码规范”,按照编码标准和规范进行分模块编码。
工具:
checkstyle http://blog.csdn.net/maritimesun/article/details/7668718
Findbugs
PMD
当然,你也可以修改这份代码规范,前提是你要知道该规范的内容意义。关于这个,Google 也提供有一份在线文档,可供参考:https://google.github.io/styleguide/javaguide.html
请根据构建之法书上编码规范里提到的那些要点整理一份你们在结对编程时使用的代码规范,把你们约定的编码规范文档也提交到git
参考:http://drysaltery.com/2015/06/15/Rainy-Days/

码云提交

小结:

结对编程真的能够带来1+1>2的效果。我和我的结对队友都是水平差不多,编程能力较差,所以对平时编程作业都是不大上心。此次结对编程让两个人一起编程,这就有了动力,毕竟这样就不是一个人在战斗了。另外,以前在编程的时候都是想一步是一步,结果到最后什么都没做好,那这次就有结对队友在旁边一起讨论,有什么想法可以先提出再讨论是否可行,所以更有效率。