作业五 5.2 5.3

实验五(5.2&5.3)

 

一、结对伙伴

林惠映   博客:http://www.cnblogs.com/LHYwin/

 

 

二、分工

首先我们两共同讨论出本次实验要完成的任务,然后按照任务逐步完善程序。

 

三、代码

1.源代码:

import java.math.BigDecimal;
import java.util.*;
public class Unit {
    int num,a,b,c;
    public Unit() throws Exception
    {
    num = (int) (Math.random() * 6);
    a = (int) (Math.random() * 200) - 100;//-100~100
    b = (int) (Math.random() * 200) - 100;//-100~100
    c = (int) (Math.random() * 200) - 100;//-100~100
    if (num == 0)//num为0时,是加减法运算
    {
        addjian(a,b,c);  
    } 
    else if (num == 1)  //num为1表示减法运算
    {
        addchen(a,b,c);
        
    } 
    else if (num == 2) 
    {   //num为2表示乘法运算
        addchu(a,b,c);
    }
     else if (num == 3) 
     {   //num为3表示除法运算,并且要考虑除数不能为0的情况,因此b!=0
        
         jianchen(a,b,c);
     }
     else if(num==4)
     {
         jianchu(a,b,c);
     }
     else if(num==5)
     {
         chenchu(a,b,c);
     }
     } 
    public static int addjian(int a,int b,int c) throws Exception
    {
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a,b的值超出范围");
        }
        return a+b-c;
    }
    public static int addchen(int a,int b,int c) throws Exception
    {
        
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a或b或c的值超出范围");
        }
        return a+b*c;
    }
    public static float addchu(int a,int b,int c) throws Exception
    {
        float d,d1;
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a,b的值超出范围");
        }
        if(c==0)
        {
            throw new Exception("除数不能为0");
        }

         d= a+(float)b/(float)c;  //将整型a,b强制转换为浮点型,保证结果正确
        BigDecimal bg = new BigDecimal(d);   //将除法结果保留小数点后两位
        d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return d1;
    }
    public static int jianchen(int a,int b,int c) throws Exception
    {
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a,b的值超出范围");
        }
        
        return a-b*c;
    }
    public static float jianchu(int a,int b,int c) throws Exception
    {
        float d,d1;
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a,b的值超出范围");
        }
        if(c==0)
        {
            throw new Exception("除数不能为0");
        }

         d= a-(float)b/(float)c;  //将整型a,b强制转换为浮点型,保证结果正确
        BigDecimal bg = new BigDecimal(d);   //将除法结果保留小数点后两位
        d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return d1;
    }
    public static float chenchu(int a,int b,int c) throws Exception
    {
        float d,d1;
        if((b<-1000||b>1000)||(a<-1000||a>1000)||(c<-1000||c>1000))
        {
            throw new Exception("a,b的值超出范围");
        }
        if(c==0)
        {
            throw new Exception("除数不能为0");
        }

         d= a*(float)b/(float)c;  //将整型a,b强制转换为浮点型,保证结果正确
        BigDecimal bg = new BigDecimal(d);   //将除法结果保留小数点后两位
        d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return d1;
    }

}

 

2.单元测试代码:

 

import static org.junit.Assert.*;
import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;


public class UnitTest {
    Unit unit;
    @Before
    public void setUp() throws Exception {
        unit=new Unit();
    }

    @Test
    public void testAddjian() {
        long Res=0;
        try
        {
        Res=unit.addjian(-2, -3,3);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        }
            assertEquals(-8,Res);
            System.out.println("加减混合运算");
    }


    @Test
    public void testAddchen() {
        long Res=0;
        try
        {
        Res=unit.addchen(-2, -3,1);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        }
            assertEquals(-5,Res);
            System.out.println("加乘混合运算");
    }

    @Test
    public void testAddchu() {
        float Res=0;
        String r1 = null;
        String r=null;
        try
        {
        Res=new Unit().addchu(10,3,4);
        r=String.valueOf(Res);
        r1=String.valueOf(10.75);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        //fail("尚未实现");
        }
        Assert.assertEquals(r1,r);
        System.out.println("加除混合运算");
    }
    @Test
    public void testJianchen() {
        int Res=0;
        try
        {
        Res=unit.jianchen(-2, -3,3);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        }
            assertEquals(7,Res);
            System.out.println("减乘混合运算");
    }
    @Test
    public void testJianchu() {
        float Res=0;
        String r1 = null;
        String r=null;
        try
        {
        Res=new Unit().jianchu(2,3,4);
        r=String.valueOf(Res);
        r1=String.valueOf(1.25);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        //fail("尚未实现");
        }
        Assert.assertEquals(r1,r);
        System.out.println("减除混合运算");
    }
    @Test
    public void testChenchu() {
        float Res=0;
        String r1 = null;
        String r=null;
        try
        {
        Res=new Unit().chenchu(10,3,4);
        r=String.valueOf(Res);
        r1=String.valueOf(7.5);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        //fail("尚未实现");
        }
        Assert.assertEquals(r1,r);
        System.out.println("乘除混合运算");
    }

}

 

3.测试结果:

 

 

四.代码覆盖:

 

          方法:我们是在每个方法的测试中加入一个输出代码,用来显示代码的运行情况

          结果:每个方法都运行成功。

 

 

五、异常处理

 

1.超出范围的异常处理(a、b、c的取值范围都在-1000~1000间)

      我们先将a,b的值设置为超出范围的数

 

     结果:

 

 

2.当除数为零的异常处理

 

    我们将其中一个除数的值设为0;

 

    结果:

 

六、负数运算

 

 

 

七、对于5.1实验的更新与改进

 

     在5.1的实验中除法不能精确到小数位,经我们讨论后改进了这个功能。

     更新的代码:

        float Res=0;
        String r1 = null;
        String r=null;
        try
        {
        Res=new Unit().jianchu(2,3,4);
        r=String.valueOf(Res);
        r1=String.valueOf(1.25);
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Assert.fail("没有抛出异常,测试失败");
        //fail("尚未实现");
        }
        Assert.assertEquals(r1,r);

 

 

   结果:

 

八、出现的问题及解决方法

 

     问题:在改进计算除法可以精确到小数位的时候AssertEquals不接受float型

     解决方法:将结果强制转换为String型,代码实现如下:

        Res=new Unit().addchu(10,3,4);
        r=String.valueOf(Res);
        r1=String.valueOf(10.75);

 

 

九、心得与体会

 

在结对合作中,我充分的感受到了团队合作的优点:提高编程效率和可以提升自己的能力。两个人一起编程,大家分工合作,大大的减少了时间,可以再较短时间内完成老师布置的任务。而且也可以在小伙伴的身上学习到很多东西,也能发现到自己的不足以及缺点。

 

 

  

 

posted @ 2015-05-06 16:00  50-陈江焕  阅读(210)  评论(3编辑  收藏  举报