Java习题>|异常>|throw自定义异常小案例

throw自定义异常小案例

<mark>题目</mark>

模拟实现用户购买商品的功能,使用数组模拟商品列表,当购买的商品不存在或者商品库存为0时,抛出自定义异常。用户购买某一个商品时,对异常进行处理,并对库存进行改变。

  1. 首先创建商品实体
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Goods {
   
    private int id;//商品id
    private String name;//商品名
    private int store;//商品库存
    private int price;//商品价格
}

此处使用的lombok插件添加注解详情

  1. 创建一个类写购买商品的方法
public class Exception2 {
   
    public static Goods[] goods;
    //初始化商品数组
    public static Scanner input;
	//初始化输入Scanner
  	//初始化商品数据
    static {
   
        goods = new Goods[3];
        input = new Scanner(System.in);
        goods[0] = new Goods(1,"apple", 10, 8000);
        goods[1] = new Goods(2,"apple", 5, 3500);
        goods[2] = new Goods(3,"apple", 8, 4200);
    }
	//main方法调用购买商品的方法
    public static void main(String[] args) {
   
        try {
   
            buygood();
        } catch (BuyGoodsException e) {
   
            System.out.println(e.getMessage());
        }
    }

    private static void buygood() {
   
        showGoods();
        System.out.println("请输入要买的商品id");
        int goodId = input.nextInt();
        //初始化一个要购买的商品
        Goods buygood = null;
        //设置变量
        boolean flag = false;
        for (Goods good : goods) {
   
            if(good==null){
   
                break;
            }
            //循环遍历商品数组中的每一个数组与输入的商品Id对比查看是否存在该商品
            if(good.getId() == goodId){
   
                buygood = good;
                //如果找到该商变量变为true
                flag = true;
                //结束循环
                break;
            }
        }
        //如果!flag==true说明flag=falsh为初始化值没有进入循环内的判断没有找到该商品
        //抛出自定义异常
        if(!flag){
   
            throw new BuyGoodsException("商品不存在");
        }
        System.out.println("您购买的商品信息如下");
        System.out.println(buygood);
        System.out.println("请输入要购买"+buygood.getName()+"的数量");
        int buynum = input.nextInt();
        //当购买数量大于商品内存的时候抛出异常
        if(buynum>buygood.getStore()){
   
            throw new BuyGoodsException("该商品库存不足");
        }
        System.out.println("购买"+buygood.getName()+buynum+"个"+"共计"+buynum*buygood.getPrice());
        //重新设置商品的库存
        buygood.setStore(buygood.getStore()-buynum);
        //展示购买完商品的信息
        showGoods();
    }
    
    //展示所有商品信息方法
    private static void showGoods() {
   
        //循环商品数组
        for (Goods good : goods) {
   
            //如果商品不等于空展示该商品
            if (good != null) {
   
                System.out.println(good);
            }
        }
    }

}
  1. 写自定义异常类

    public class BuyGoodsException extends RuntimeException {
         
        //自定义的异常类必须继承Exception的子类RuntimeException
        //当然也可以继承Exception那么这个自定义异常类就变成了编译时异常
        //必须处理
        private String msg;
        public BuyGoodsException(String msg) {
         
            super(msg);
        }
        //此处的构造方法必须重写父类的放方法。
    }
    
    

    初来乍到有写的不对的欢迎指教

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务