当前位置:课程学习>>第六章 异常处理>>实践活动
同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?
实践主题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));
}
}
}