上机实验4 异常处理案例

实验1 检查危险品

一、实验目的

本实验的目的是让学生掌握使用try-catch语句

二、实验内容

车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。

编写一个Exception的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”。

编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。

程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

三、程序代码

class Goods {
	   boolean isDanger;
	   String name;
	   public void setIsDanger(boolean boo) {
	      isDanger = boo;}
	   public boolean isDanger() {
	      return isDanger;  
	      }
	   public void setName(String s) {
	      name = s;
	      }
	   public String getName() {
	      return name;
	      }
	   }
class DangerException extends Exception {
	   String message;
	   public DangerException() {
	       message = "危险品!";
	   }
	   public void toShow() {
	       System.out.print(message+" ");
	       }
	   }
class Machine {
	  public void checkBag(Goods goods) throws DangerException {
	     if(goods.isDanger()) {
	         DangerException danger=new DangerException();
	         throw new DangerException();//【代码1】   //抛出danger
	     }
	     else {System.out.print(goods.getName()+"不是危险品! ");
	     }
	  }
	}
public class Check {
	public static void main(String args[]) {
	      Machine machine = new Machine();
	      String name[] ={"苹果","炸药","西服","硫酸","手表","硫磺"};
	      Goods [] goods = new Goods[name.length]; //检查6件货物  
	      for(int i= 0;i<name.length;i++) {
	         goods[i] = new Goods();
	         if(i%2==0) {
	            goods[i].setIsDanger(false);
	            goods[i].setName(name[i]);
	         }
	         else {
	            goods[i].setIsDanger(true);
	            goods[i].setName(name[i]);
	         }
	      }
	      for(int i= 0;i<goods.length;i++) {
	        try {
	            machine.checkBag(goods[i]);
	            System.out.println(goods[i].getName()+"检查通过");
	            }
	        catch(DangerException e) {
	           e.toShow(); //e调用toShow()方法
	           System.out.println(goods[i].getName()+"被禁止!"); 
	           }
	        }
	      }
	}

四、实验指导

1、try-catch语句可以有几个catch组成,分别处理发生的相应异常。

2、catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。

实验2 使用自定义异常

创建一个输入3条边长表示一个三角形的Triangle类,并计算其面积

import java.util.Scanner;//导入Scanner类
public class SX6 {//主类
public static void main(String[] args) {//主方法
	Scanner val = new Scanner(System.in);//声明一个Scanner对象
	System.out.println("请输入三角形的3条边长:");
	while(true) {//死循环,只有正确输入三角形面积后才能退出
		double a = val.nextDouble();
		double b = val.nextDouble();
		double c = val.nextDouble();//读取用户输入的三个边长值
		try {//创建类是可能会发生异常,故放在try语句块中
			Triangle t = new Triangle(a,b,c);
			System.out.println("三角形面积为:"+t.getArea());
			break;//结束运行
		}
		catch(IllegaTriangleException ex) {//捕获并处理IllegaTriangleException异常
			System.out.println(ex.toString());//显示异常信息
			System.out.println("请重新输入:");
		}
	}val.close();//关闭对象
}}
class IllegaTriangleException extends Exception{
	public double a, b, c;//表示3条边长的字段
	public IllegaTriangleException (double a,double b,double c) {//构造异常
			this.a = a;
			this.b = b;
			this.c = c;}
	public String toString() {//重写toString()方法
		return "边长"+a+","+b+","+c+"无法组成有效的三角形";
	}
}
class Triangle{
	private double a,b,c;//构造方法
	public Triangle (double a,double b,double c)throws IllegaTriangleException{
		//在构造方法声明语句中声明可能会抛出的异常类IllegaTriangleException
		if(a+b>c&&b+c>a&&a+c>b) {//如果两边之和大于第三边
			this.a = a;
			this.b = b;
			this.c = c;}
		else //否则抛出IllegaTriangleException异常
			throw new IllegaTriangleException(a,b,c);
	}
	public double getArea() {//用于计算三角形面积的getArea()方法
		double p = (a+b+c)/2.0;
		double s = Math.sqrt(p*(p-a)*(p-b)*(p-c));
		return s;
	}
}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meteor.792

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值