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子句。

  1. import java.util.*;
  2. import java.io.*;
  3. class DividedException extends RuntimeException{
  4. public DividedException(){}
  5. public DividedException(String s){//输出的错误文字信息
  6. super(s);
  7. }
  8. }
  9. class MyMath{
  10. int x;
  11. int y;
  12. public static double divide(int x,int y) throws DividedException{
  13. if (y==0){
  14. //抛出异常
  15. throw new DividedException("被零除!");
  16. }else{
  17. return x*1.0/y;
  18. }
  19. }
  20. }
  21. class Main{
  22. public static void main(String [] args){
  23. try {
  24. int i,j;
  25. System.out.println("请输入被除数和除数:");
  26. Scanner sc = new Scanner(System.in);
  27. i=sc.nextInt();
  28. j = sc.nextInt();
  29. double div = MyMath.divide(i,j);
  30. System.out.println(i+"/"+j+"= " + div);
  31. } catch(InputMismatchException e){
  32. System.out.println("请输入数值!");
  33. } catch(DividedException e){
  34. System.out.println(e.getMessage());
  35. }
  36. }
  37. }

image.png

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() 方法的判断

  1. import java.util.Scanner;
  2. class AreaException extends RuntimeException{
  3. public AreaException(){
  4. super("areaException");
  5. }
  6. AreaException(String s){
  7. super(s);
  8. }
  9. }
  10. interface Calculatable{
  11. public void getArea();
  12. }
  13. class RoundTable implements Calculatable{
  14. private double r;
  15. public RoundTable(double r){
  16. this.r=r;
  17. }
  18. public double area(){
  19. return 3.14*r*r;
  20. }
  21. public void getArea()throws AreaException{
  22. if(r<=0){
  23. throw new AreaException("半径异常!") ;
  24. }
  25. System.out.println("圆桌面积:"+area());
  26. }
  27. }
  28. class RectTable implements Calculatable{
  29. private double l;
  30. private double w;
  31. public RectTable(double l,double w){
  32. this.l=l;
  33. this.w=w;
  34. }
  35. public double area(){
  36. return l*w;
  37. }
  38. public void getArea()throws AreaException{
  39. if(l<=0||w<=0||l<w){
  40. throw new AreaException("异常!") ;
  41. }
  42. System.out.println("方桌面积:"+area());
  43. }
  44. }
  45. public class Main{
  46. public static void main(String[]args){
  47. double r=0;
  48. double l=0;
  49. double w=0;
  50. System.out.println("输入圆桌的半径:");
  51. System.out.println("输入方桌的长和宽:");
  52. Scanner sc=new Scanner(System.in);
  53. r=sc.nextDouble();
  54. l=sc.nextDouble();
  55. w=sc.nextDouble();
  56. RoundTable s1=new RoundTable(r);
  57. try{
  58. s1.getArea();
  59. }
  60. catch(AreaException e){
  61. System.out.println("圆桌的半径小于等于0!");
  62. }
  63. finally{
  64. System.out.println("圆桌的计算结束!");
  65. }
  66. RectTable s2=new RectTable(l,w);
  67. try{
  68. s2.getArea();
  69. }
  70. catch(AreaException e){
  71. System.out.println("方桌的长或宽小于等于0、或者长小于宽!");
  72. }
  73. finally{
  74. System.out.println("方桌的计算结束!");
  75. }
  76. }
  77. }

image.png