结对编程作业1

1.改进现有代码

1.博客链接
201521123015
201521123017

2.码云

四则运算优化
使用图形界面实现四则运算

  • 类图

  • JUnit单元测试

2.功能改进与扩展

  • 代码
public void sqrt(String s)//根号
        {
        	
            String[] str=s.split("\\#");
            
            
            if(str[0].indexOf("/")>-1 )//分数
            {
            	String[] str1=str[0].split("\\/");
            	
            	if(Integer.parseInt(str1[1]) != 0 )//分母不为零
            	{
            		
            		int a=Integer.parseInt(str1[0]);
            		int b=Integer.parseInt(str1[1]);
            		double a1=Math.sqrt(a);
            		double b1=Math.sqrt(b);
            		a=(int)a1;
            		b=(int)b1;
            		
            	
            		result=simplefraction(a,b);
            	  	
            	}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 c=Integer.parseInt(str[0]);
     	    	   double c1=Math.sqrt(c);
     	    	   c=(int)c1;
     	    	   result = c+""; 
     	    	   }       	
            
           else{
        	   throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
           } 
            
        }
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);
        				}
        		}

  • 运行截图

  • 为了进一步提升原来四则运算小程序的功能,我加入了对数据进行求根的算法,然后通过JAVA中 Math.sqrt() 函数来实现这一功能。

  • 需求分析阶段:现有的四则运算小程序拥有舒适的GUI界面,并且在界面能直接选择中文简体/中文繁体/英语三种语言,贴近用户需求,方便用户使用。其余的计时功能和保存错题数目也让次程序更有价值。然后我认为这个运算小程序在解决计算问题方面还略有不足,用户在使用程序时只能选择加减乘除和加入括号,不能满足用户日益增长的需求,所以我加入了对数值进行求根号的功能,让这个程序能完成更复杂的任务,进一步完善程序功能。

  • 设计分析阶段:首先sqrt() 方法可返回一个数的平方根,通过调用Math.sqrt(x)函数可以计算一个数的任意次根,值得注意的是参数x是必需的,而且它必须是大于等于 0 的数。如果 x 小于 0,则返回 NaN。如果x是正无穷大,那么结果为正无穷大。而要实现一个sqrt函数,我们有几种方法,其中二分法是比较简单且中规中矩的。首先让我们确定一个范围[begin, end],这个范围的中间数mid,看mid的平方是否等于x,如果相等,则返回mid,如果不等则缩小[begin,end]的范围,为原来的一半。这里的初始范围可以是[1, x],也可以是更精确一些的[1, (x/2) + 1]。(因 (x/2) + 1 的平方等于 x+1+(x^2/4),它一定大于x,所以,x的平方根一定在[1, (x/2) + 1]范围内)。但是这么做性能不高,牛顿迭代法是更好的选择。我们第一步就是构建曲线,假设有一个数c,我们求它的平方根x,那么有一个等式,x^2 = c;挪到一边就是求 f = x^2 - c的根x。第二步带入公式Xn+1=Xn-F(X(n))/F’(X(n))。第三部在迭代的开始,我们可以取c,而迭代的结束,就是和我们预期的很接近。那通过这么一个算法,我们就能很好得实现了求根这一功能。

  • 代码风格规范和代码设计规范

3.两人编程

  • 运行截图

    • 四则运算优化

    • 使用图形界面实现四则运算

  • 码云提交截图

    • 四则运算优化

    • 使用图形界面实现四则运算

  • 结对编程照片

  • 测评
PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
Planning 计划 10 15
· Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 10 12
Development 开发 60 75
· Analysis 需求分析 (包括学习新技术) 10 20
· Design Spec 生成设计文档 10 15
· Design Review 设计复审 6 8
· Coding Standard 代码规范 5 3
· Design 具体设计 8 9
· Coding 具体编码 40 45
· Code Review 代码复审 5 4
· Test 测试(自我测试,修改代码,提交修改) 8 13
Reporting 报告 7 8
. 测试报告 3 2
. 计算工作量 1 1
. 并提出过程改进计划 3 3

posted on 2018-03-25 14:26  王华俊  阅读(189)  评论(1编辑  收藏  举报