当前位置:课程学习>>第六章 异常处理>>实践活动




同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?

实践主题1:异常的捕获与处理

实践目标1:掌握异常的捕获与处理方法。

实践任务1:按模板要求,将[代码]处替换为Java程序代码

实践要求1:编写一个Java应用程序,计算两数相除并输出结果。使用三个catch子句,分别捕获IO异常、类型转换异常以及除0异常。

Ex1.java

  import java.io.*;

  public class Ex1

  {

    public static void main(String args[])

    {

      int a,b,c;

      try{

        BufferedReader strin= new BufferedReader(new InputStreamReader(System.in));

        System.out.print("请输入除数:");

        String c1=strin.readLine();

        [代码1] //把c1转换为整数赋值给a

        System.out.print("请输入被除数:");

        c1=strin.readLine();

        [代码2] //把c1转换为整数赋值给b

        [代码3] //b除以a赋值给c

        System.out.println("商为:"+c);

      }

        [代码4] //捕获与io有关的异常

     {

        [代码5] //输出异常的相关信息

     }

        [代码6] //捕获数值转化时的异常,如不能将字符转化成数值

    {

        System.out.println("请输入整数!");

    }

        [代码7] //捕获除数为0的异常

    {

         System.out.println("除数不可以为0!");

    }

  }

}

教师分析:

这个实践主要是加强对使用try-catch语句的掌握。参考代码如下:

a=Integer.parseInt(c1);          //[代码1]

b=Integer.parseInt(c1);          //[代码2]

c=b/a;                       //[代码3]

catch(IOException e)                //[代码4]

e.printStackTrace();            //[代码5]

catch(NumberFormatException e) //[代码6]

catch(ArithmeticException e)             //[代码7]

 

实践主题2:自定义异常

实践目标2:掌握自定义异常及其捕获处理。

实践任务2:按模板要求,将[代码]处替换为Java程序代码

实践要求2:编写一个Java应用程序,自定义异常,当输入数值为13与4时产生异常。

MyEx.java

   [代码1] //定义一个Ex2的异常类,继承Exception

   {

      Ex2(String msg)

      {

        [代码2] //调用父类对应的构造方法

      }

   }

public class MyEx

{

   private int x;

   void setX(int x)

   {

      [代码3] //把参数赋值给成员x

   }

   void f1() throws Ex2

   {

      if (x==13)

        [代码4] //抛出“I don't like 13”的Ex2异常

     else if (x==4)

        [代码5] //抛出“I don't like 4”的Ex2异常

     else

        System.out.println(100/x);

    }

public static void main(String args[])

{

   MyEx a=new MyEx();

   try

   {

      a.setX(5);

      //a.setX(13);

      //a.setX(4);

      //a.setX(0);

      a.f1();

   }

     [代码6] //捕获Ex2异常

   {

      System.out.println("已经捕获到Ex2异常"); //(1)注意该语句的输出

      System.out.println("get message:"+e.getMessage()); //(2)

    }

  }

}

教师分析: 

这个实践主要是加强对自定义异常的掌握。参考代码如下: 

class Ex2 extends Exception          //[代码1]

super(msg);                   //[代码2]

this.x=x;                  //[代码3]

throw new Ex2("I don't like 13!"); //[代码4]

throw new Ex2("I don't like 4!");   //[代码5]

catch(Ex2 e)                 //[代码6]

 

实践主题3:递归

实践目标3:掌握递归与非递归的用法。

实践要求3:编写一个Java程序JieCheng.java,要求分别采用递归方法和非递归方法计算n的阶乘:n!=n*(n-1)*…*1,其中n为大于0的整数。并用这两种方法分别输出n为1,n为2,……,n为10的阶乘结果。

教师分析:

public class JieCheng

{

   long diGui(int n)

   {

     if (n<1)

     {

         System.out.println("只能求大于0的整数阶乘");

         return 0;

      }

    else if (n==1)

        return 1;

    else

        return n*diGui(n-1);         

    }

long notDiGui(int n)

{

     long sum=1;

     if (n<1)

     {

        System.out.println("只能求大于0的整数阶乘");

        return 0;

     }

     else

     {

       for(int i=2;i<=n;i++)

         sum=sum*i;

      return sum;

     }

}

public static void main(String[] args)

{

    JieCheng test=new JieCheng();

    for(int i=1;i<=10;i++)

    {

        System.out.println(i+"的阶乘(递归方法)为:"+test.diGui(i));

        System.out.println(i+"的阶乘(非递归方法)为:"+test.notDiGui(i));                

    }

  }

}

进入拓展资源