一、实验目的

异常处理

实验内容:

必做
异常的捕获

  1. 编写程序DivideExcep.java。计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。
  2. 编写一个程序IntegerExcep.java。从命令行输入一个字符串,将该字符串转换为double型数据,当数据不在【0,100】之间时抛出一个异常,采用适当的机制来捕获并处理异常。可以用现成的异常也可以自定义异常。
  3. 自定义一个三角形类Triangle.java,其中:
    1)成员x,y,z作为三角形的三边长;
    2)构造方法通过参数分别对x,y,z赋值;
    3)两个方法getArea求面积,显示三角形信息showInfo。这两个方法中当三条边不能构成三角形要抛出自定义异常NotTriangleException,否则显示正确信息。
    另一个类TestTriangle,主方法中构造一个三角形对象Tri,三条边从控制台输入,显示三角形的信息和面积,要求捕获异常。

实验解答

package ex09;
import java.util.InputMismatchException;
import java.util.Scanner;
//计算两数相除并输出结果
public class DivideExcep {
	//public static void m1() {
	public static void main(String[] args) {
	
		try {
			System.out.println("计算两数相除并输出结果\n请输入 除数:");
			Scanner s = new Scanner(System.in );
			int a = s.nextInt();
			System.out.println("请输入被除数:");
			int b = s.nextInt();
			double c = a/b;
			//System.out.println(a+"/"+b+"="+c);
			s.close();
		}
		catch(ArithmeticException e) {
			System.out.println("对不起,除数不能为0!");
			
		}
		// 数字格式化异常
		catch(InputMismatchException e) {
			System.out.println("对不起,除法运算不能含有字母!");
			//System.out.println(e);
		}
			
	}
	

}
package ex09;

public class IllegalNameException extends RuntimeException {
	public IllegalNameException(String str) {
		//String str;
		super(str);
	}

}
package ex09;

import java.util.Scanner;
public class IntegerExcep {
	public void m1(String str) throws IllegalNameException{
		double a = Double.parseDouble(str);
		if(a<0||a>100) {
			//异常
			//创建异常对象
			throw new IllegalNameException("数据超出有效范围!");
		}
	}
	public static void main(String[] args) {
		System.out.println("请输入一个【0,100】之间数 :");
		Scanner s = new Scanner(System.in);
		String str = null;
		try {
			//double a = (double)(s.next());
			str = s.next();
			//double a = (double) str;
			// 将String类型转换成double类型
			//Double.parseDouble(str);
			
			IntegerExcep IE = new IntegerExcep();
			IE.m1(str);
			//若程序出现异常,便不会进行到这步,若无异常,即可输出
			System.out.println("转换结果为:"+Double.parseDouble(str));
		}catch(IllegalNameException e){
			System.out.println(e.getMessage());
			
		}finally {
			s.close();
		}
		//程序若能运行到此处,输入肯定是合法的
		
	}

}
package ex09;

public class NotTriangleException extends RuntimeException {
	public NotTriangleException(String msg) {
		super(msg);
		
	}
}
package ex09;

import java.util.Scanner;

public class TestTriangle {

	public static void main(String[] args) {
		
		System.out.println("请输入三角形的3条边:");
		
		Scanner s = new Scanner(System.in);
		
		try {
		
			double x = s.nextDouble();
			
			double y = s.nextDouble();
			
			double z = s.nextDouble();
			
			if(x+y<=z||x+z<=y||z+y<=x) {
				//异常,无法构成三角型;
				throw new NotTriangleException("您输入的三条边无法构成三角形!");
			}
		
			Triangle Tri = new Triangle(x,y,z);

			Triangle.getArea();
			
			Triangle.showInfo();
			
		}catch(NotTriangleException e) {
			
			System.out.println(e.getMessage());
			
		}finally {
			
			s.close();
		}
	}
}
package ex09;

public class Triangle {
	//成员x,y,z作为三角形的三边长;
	static double x,y,z;
	//double y;
	//double z;
	//构造方法通过参数分别对x,y,z赋值;
	public Triangle(double x,double y,double z) {
		this.x = x;
		this.y = y;
		this.z = z;
	}
	//getArea求面积
	public static double getArea() throws NotTriangleException{
		/*
		Triangle T = new Triangle(x,y,z);
		if(x+y<z||x+z<y||z+y<x) {
			//异常,无法构成三角型;
			throw new NotTriangleException("您输入的三条边无法构成三角形!");
		}
		*/
		double p,Area;
		p=(x+y+z)/2;
		Area = Math.sqrt(p*(p-x)*(p-y)*(p-z));
		return Area;
	}
	//showInfo显示三角形信息
	public static void showInfo() throws NotTriangleException{
		//Triangle.getArea();
		double Area = getArea();
		System.out.println("三角形的三条边分别为:"+x+" "+y+" "+z+'\n'+"面积为:"+Area);
		
	}
}

实验总结:

学习了异常的处理和异常的抛出的使用