1.对教材17章中训练程序中的代码适当修改,完成自定义异常和异常的捕获处理。题目具体要求如下:
(1)自定义异常类DividedException。
(2)定义MyMath类,该类中包含divide(int x,int y)静态方法,该方法完成x除以y的运算,若y的值为0,则抛出DividedException异常。
(3)定义测试类Main,该类中定义display()方法,方法中接收键盘的输入,
输入提示为:“请输入被除数和除数:”,然后调用divide()方法。
若输入的两个数为5和2,则输出:5/2=2.5
若输入5和0,则输出:被零除!
若输入5和2x,则输出:请输入数值!
display()方法中对异常使用try-catch进行捕获和处理,需要捕获两种类型的异常,一个是InputMismatchException异常,一个是DividedException异常,因此需要使用两个catch子句。
在测试类的main方法中调用display()方法。
要求:
(1)必须严格按照题目的要求完成,否则会扣分。
(2)程序中必须使用上try、catch、throw和throws四个关键字。
(3)程序中必须使用两个catch子句。
import java.util.*;
import java.io.*;
class DividedException extends RuntimeException{
public DividedException(){}
public DividedException(String s){//输出的错误文字信息
super(s);
}
}
class MyMath{
int x;
int y;
public static double divide(int x,int y) throws DividedException{
if (y==0){
//抛出异常
throw new DividedException("被零除!");
}else{
return x*1.0/y;
}
}
}
class Main{
public static void main(String [] args){
try {
int i,j;
System.out.println("请输入被除数和除数:");
Scanner sc = new Scanner(System.in);
i=sc.nextInt();
j = sc.nextInt();
double div = MyMath.divide(i,j);
System.out.println(i+"/"+j+"= " + div);
} catch(InputMismatchException e){
System.out.println("请输入数值!");
} catch(DividedException e){
System.out.println(e.getMessage());
}
}
}
2.在第16章中定义了桌子类、圆桌类和方桌类,在子类圆桌和方桌实现了接口Calculatable的getArea()方法。按如下要求继续修改程序:
(1)自定义异常类AreaException ,表示计算面积出现异常。
(2)在接口方法getArea()声明抛出异常,写法是:
public double getArea() throws AreaException;
(3)在子类圆桌类中的getArea()方法中,判断若圆桌半径小于等于0,则抛出异常。
(4)在子类方桌类中的getArea()方法中,判断若方桌的长或宽小于等于0、或者长小于宽,则抛出异常。
(5)在测试类Main中的main()方法中,接收键盘的输入,输入圆桌半径和方桌的长和宽。输入提示为:
输入圆桌的半径:
输入方桌的长和宽:
并创建圆桌对象和方桌对象,计算方桌和圆桌的面积,并使用try-catch-finally对异常进行捕获和处理。为了输出提示的准确性,计算圆桌面积用一个try-catch-finally处理,计算方桌面积再用一个try-catch-finally处理。
输出结果:
若输入30、40、60,则输出:
圆桌面积:2826.0
圆桌的计算结束!
方桌的长或宽小于等于0、或者长小于宽!
方桌的计算结束!
若输入-5、60、40,则输出:
圆桌的半径小于等于0!
圆桌的计算结束!
方桌面积:2400.0
方桌的计算结束!
若输入30、5、0,则输出:
圆桌面积:2826.0
圆桌的计算结束!
方桌的长或宽小于等于0、或者长小于宽!
方桌的计算结束!
要求: 程序中必须使用上try、catch、throw、throws和finally五个关键字。
说明:仅针对getArea()方法,不做 getPerimeter() 方法的判断
import java.util.Scanner;
class AreaException extends RuntimeException{
public AreaException(){
super("areaException");
}
AreaException(String s){
super(s);
}
}
interface Calculatable{
public void getArea();
}
class RoundTable implements Calculatable{
private double r;
public RoundTable(double r){
this.r=r;
}
public double area(){
return 3.14*r*r;
}
public void getArea()throws AreaException{
if(r<=0){
throw new AreaException("半径异常!") ;
}
System.out.println("圆桌面积:"+area());
}
}
class RectTable implements Calculatable{
private double l;
private double w;
public RectTable(double l,double w){
this.l=l;
this.w=w;
}
public double area(){
return l*w;
}
public void getArea()throws AreaException{
if(l<=0||w<=0||l<w){
throw new AreaException("异常!") ;
}
System.out.println("方桌面积:"+area());
}
}
public class Main{
public static void main(String[]args){
double r=0;
double l=0;
double w=0;
System.out.println("输入圆桌的半径:");
System.out.println("输入方桌的长和宽:");
Scanner sc=new Scanner(System.in);
r=sc.nextDouble();
l=sc.nextDouble();
w=sc.nextDouble();
RoundTable s1=new RoundTable(r);
try{
s1.getArea();
}
catch(AreaException e){
System.out.println("圆桌的半径小于等于0!");
}
finally{
System.out.println("圆桌的计算结束!");
}
RectTable s2=new RectTable(l,w);
try{
s2.getArea();
}
catch(AreaException e){
System.out.println("方桌的长或宽小于等于0、或者长小于宽!");
}
finally{
System.out.println("方桌的计算结束!");
}
}
}