一、我的结对小伙伴是:陈俊金 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; } }
程序的运行结果
当把除数设为0时,由于抛出了异常,出现以下情况
通过测试程序测试对于各种参数的支持。并能看到代码覆盖率。
对于参数的支持
分别对参数处于-1000~1000以及运算符超出4个进行了测试,结果如下
超出1000时
对于临界999进行计算,,这里我把正确值设为1,是为了方便查看得出的答案,18+999/20-(-20)=87.95是正确的。
最小值小于-1000时
临界-999时,得出的答案也是正确的
当运算符超出4个时
代码覆盖率
我在进行不同运算的最后都加入一条输出语句,然后看代码是否都运行了一边,这里我把运算符的限制取消,写一个复杂的算式
通过计算机可以看出计算的结果是正确的,并且代码都覆盖到了。这里面还进行了负数的运算。
五、心得体会
一开始这个作业出来的时候我不知道怎么做,在经过一番挣扎之后出来了这点东西。可以说这次的作业花了我很多的时间,同时也让我学习到了很多的东西。辛苦了很久,在和伙伴一起的努力下完成的感觉还真的是很不错的.单元测试和代码的覆盖我觉得自己的做法是不正确的,但是我也只能想到这种做法了,有不足的地方我现在也不知道要怎么改了!