异常处理实验

程序设计:

设计并实现一个检查危险品的异常处理程序。

问题描述:

车站里存放了很多的货物,这些货物将会通过一个设备进行检测,如果是非危险品,则通过检查,而如果是危险品,则会报出警告并且禁止货物通行。

现有这样的一个系统可以完成货物的检查,它包含有如下几个类:

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()+"禁止通行");
                }
        }
    }
}

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,作为AI语言模型,我无法完成实验报告的撰写任务。不过我可以提供一些关于Java异常处理的信息,希望能对你有所帮助。 Java异常处理Java编程语言中的重要概念之一,可以帮助开发人员编写更加健壮、可靠的程序。当程序发生异常情况时,Java虚拟机会抛出异常,如果不进行处理,程序将会中断运行。因此,了解异常处理的相关知识是非常必要的。 Java异常分为Checked Exception和Unchecked Exception两种型。Checked Exception必须在代码中进行处理或者抛出,否则编译器会报错。而Unchecked Exception则不需要显式进行处理,可以在代码中选择处理或者让程序崩溃。 在Java中,异常处理主要通过try-catch-finally语句块来实现。try块中包含可能引发异常的代码,catch块中包含异常处理代码,finally块中包含一定会执行的代码,无论try块中是否发生异常。 以下是一个简单的Java异常处理示例代码: ```java public class ExceptionTest { public static void main(String[] args) { try { int[] array = new int[5]; array[10] = 3; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界异常"); } finally { System.out.println("finally块一定会执行"); } } } ``` 在上面的代码中,try块中修改了一个长度为5的数组的第10个元素,会引发ArrayIndexOutOfBoundsException异常。在catch块中对这个异常进行了处理,输出了一条错误信息。在finally块中输出了一条一定会执行的信息。 希望这些信息对你有所帮助。如果你还有其他问题或需要更深入的了解,可以随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梅子味的可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值