一、我的结对小伙伴是:陈俊金 http://www.cnblogs.com/cjj19/

二、运行环境:eclipse

三、 我们一起合作做了完成了任务,控制了精度是小数点后两位,以及完善了程序,一起认真的研究代码中的错误。

四、代码

这一部分是测试用代码

test1Test.java
import static org.junit.Assert.*;


import org.junit.Test;


public class test1Test {

    @Test
    public void testMethodA() {
        try{
            setting set=new setting();
        int []a={11,6,2};
        char []c={'+','/'};
        int n=a.length-1;
        set.bijiao(a, n);
        test1.methodA(n, a, c);
        assertEquals(14.0, test1.getresult());
    }
        catch(Exception e)
        {
             System.out.println("除数不能为0");
        }
}
}

这一部分是计算的核心代码

import java.math.BigDecimal;

public class test1 {
private static Object S = null;
public static void methodA(int n,int b[],char d[]){//封装的类,传递的参数   n是运算符的个数   a是数字数组   c是符号数组
        
        int i,j;
        double a[]=new double[10];
        char c[]=new char[10];
        a[0]=b[0];
        for(i=0;i<n;i++)
        {
            a[i+1]=b[i+1];
            c[i]=d[i];
        }
        if(n==0) //运算个数为0,进行阶乘
        {
            for(i=(int) a[0];i>1;i--)
            {
                a[0]=a[0]*(i-1);
            }


        }
        /*下面这部分是对算式进行解析并且进行四则运算*/
        else{
            for(i=0;i<=n;i++)
            {
                if(c[i]=='*')
                {
                    a[i]=a[i]*a[i+1];
                    for(j=i;j<n;j++) 
                    {
                        a[j+1]=a[j+2];
                        c[j]=c[j+1];
                    }
                    i=0;
                    n--;
                
                }
                if(c[i]=='/')
                {
                    a[i]=a[i]/a[i+1];
                    for(j=i;j<n;j++) 
                    {
                        a[j+1]=a[j+2];
                        c[j]=c[j+1];
                    }
                    i=0;
                    n--;
            
                }
            }
            for(i=0;i<=n;i++)
            {
                if(c[i]=='+')
                {
                    a[i]=a[i]+a[i+1];
                    for(j=i;j<n;j++) 
                    {
                        a[j+1]=a[j+2];
                        c[j]=c[j+1];
                        
                    }
                    i=0;
                    n--;
                
                }
                if(c[i]=='-')
                {
                    a[i]=a[i]-a[i+1];
                    for(j=i;j<n;j++) 
                    {
                        a[j+1]=a[j+2];
                        c[j]=c[j+1];
                    }
                    i=0;
                    n--;
                }
            }
        }
        BigDecimal bg = new BigDecimal(a[0]);
        S=bg.setScale(setting.decimals, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
public static  Object getresult() {
    return S;
}


}
test1

程序的运行结果

当把除数设为0时,由于抛出了异常,出现以下情况

通过测试程序测试对于各种参数的支持。并能看到代码覆盖率。

对于参数的支持

分别对参数处于-1000~1000以及运算符超出4个进行了测试,结果如下

超出1000时

对于临界999进行计算,,这里我把正确值设为1,是为了方便查看得出的答案,18+999/20-(-20)=87.95是正确的。

最小值小于-1000时

临界-999时,得出的答案也是正确的

当运算符超出4个时

 

代码覆盖率

我在进行不同运算的最后都加入一条输出语句,然后看代码是否都运行了一边,这里我把运算符的限制取消,写一个复杂的算式

通过计算机可以看出计算的结果是正确的,并且代码都覆盖到了。这里面还进行了负数的运算。

五、心得体会

一开始这个作业出来的时候我不知道怎么做,在经过一番挣扎之后出来了这点东西。可以说这次的作业花了我很多的时间,同时也让我学习到了很多的东西。辛苦了很久,在和伙伴一起的努力下完成的感觉还真的是很不错的.单元测试和代码的覆盖我觉得自己的做法是不正确的,但是我也只能想到这种做法了,有不足的地方我现在也不知道要怎么改了!

posted on 2015-05-08 17:51  24朱浩龙  阅读(424)  评论(1编辑  收藏  举报