程序设计:
设计并实现一个检查危险品的异常处理程序。
问题描述:
车站里存放了很多的货物,这些货物将会通过一个设备进行检测,如果是非危险品,则通过检查,而如果是危险品,则会报出警告并且禁止货物通行。
现有这样的一个系统可以完成货物的检查,它包含有如下几个类:
1)Goods:货物类,包含有货物的名称和是否是危险品两个属性;
2)DangerException:危险品异常类,当检测到危险品时需要抛出该异常类对象,该类继承Exception类,包含一个message成员,构造该异常对象时,message默认赋值为“危险品警告”,另外该类包含一个show方法,当捕获到该类异常对象时被调用输出message;
3)Machine:机器设备类,该类负责对某一个产品进行检测,如果是危险品,则抛出危险品异常对象,如果不是危险品则不做处理;
4)Station:车站类,该类中存储了多个货物对象,以及一台设备对象,可以启动机器设备对所有的货物进行检测,并对检测操作捕获异常,如果是非危险品,即未产生异常,则直接输出“商品名称检测通过”,若是危险品,则将输出异常信息,并输出“商品名称禁止通行”。
所有的输出均无标点,且使用println输出。
请编写代码实现该系统。
问题分析:
1)DangerException类是自定义的异常类,继承了Exception,构造方法中设置message的默认值即可,在show方法中可以直接输出
2)在Machine类中,检查货物时,要判断该货物的dangerous属性,如果为true,即为危险品,此时需要抛出一个危险品异常对象,并且要在方法上添加抛出声明;
3)在Station类的检查方法中,对于其货物列表中的每一个货物进行检查,需要使用try-catch包围每一个货物的检查操作而不是整体,可以直接在try语句的check调用之后输出通过的语句,如果发生异常,则将会直接进入catch语句,在catch中调用异常对象的show方法,然后输出禁止通行的结果。
算法设计:
第一步,实现DangerException类,添加构造方法,其中执行默认消息值,实现show方法,对消息进行输出;
第二步,实现Machine类的checkBag方法,其中根据货物属性判断来抛出异常对象;
第三步,实现Station类的checkAll方法,对列表进行遍历,遍历中使用try-catch语句对每个货物进行检查和捕获。
最后,在TestMain的main方法中进行调试测试。
测试输入:
"苹果", "炸药", "西服", "硫酸", "手表", "硫磺"
预期输出:
苹果检测通过
危险品警告
炸药禁止通行
西服检测通过
危险品警告
硫酸禁止通行
手表检测通过
危险品警告
硫磺禁止通行
import java.util.ArrayList;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
Station station = new Station();
// 模拟货物列表
String[] names = {"苹果", "炸药", "西服", "硫酸", "手表", "硫磺"};
List<Goods> list = new ArrayList<>();
for (int i = 0; i < names.length; i++){
Goods g = new Goods();
g.setName(names[i]);
g.setDangerous(i % 2 != 0); // 下标为奇数的是危险品
list.add(g);
}
station.setGoodsList(list);
// 模拟检查
station.checkAll();
/*
本例将会输出:
苹果检测通过
危险品警告
炸药禁止通行
西服检测通过
危险品警告
硫酸禁止通行
手表检测通过
危险品警告
硫磺禁止通行*/
}
}
public class Goods {
private boolean dangerous; // 是否是危险品
private String name; // 商品名称
public void setDangerous(boolean dangerous) {
this.dangerous = dangerous;
}
public boolean isDangerous() {
return dangerous;
}
public void setName(String s) {
name = s;
}
public String getName() {
return name;
}
}
public class DangerException extends Exception {
private String message; // 异常消息
// 添加构造函数定义
public DangerException(String s){
message=s;
}
public DangerException(){
message="危险品警告";
}
// 添加show方法定义
public void toShow(){
System.out.println("危险品警告");
}
}
public class Machine {
// 检查货物,如果是危险品,则抛出DangerException异常
public void checkBag(Goods goods) throws DangerException {
// 在此完成方法的定义
if(goods.isDangerous()==true){
throw new DangerException(goods.getName());
}
}
}
import java.util.List;
public class Station {
private List<Goods> goodsList;
private Machine machine = new Machine();
public List<Goods> getGoodsList() {
return goodsList;
}
public void setGoodsList(List<Goods> goodsList) {
this.goodsList = goodsList;
}
// 检测所有货物
public void checkAll() {
// 在此完成方法的定义
for(int i=0;i<goodsList.size();i++){
try{
machine.checkBag(goodsList.get(i));
System.out.print(goodsList.get(i).getName());
System.out.println("检测通过");
}catch(DangerException e){
e.toShow();
System.out.println(goodsList.get(i).getName()+"禁止通行");
}
}
}
}