Java入门第三季1.9问题编码

不多说,直接上代码,有什么问题写评论里,我再修改完善
强化版发布,自动判断搜书途径,更少的异常状况,详情请见:Java入门第三季1.9问题编码 Plus版
测试程序

import java.util.*;
public class TestLendBook
{
    public static void main(String[] args) 
    {
        LendBook lb=new LendBook();
        lb.initialBook();//初始化书籍信息
        lb.checkBook();//找书
    }
}

查书系统

class LendBook
{
    private String[] books=new String[4];
//初始化书籍
    void initialBook(){
        books[0]="西游记";
        books[1]="三国演义";
        books[2]="水浒传";
        books[3]="红楼梦";
    }
//找书总程序,所有自定义异常都在这里catch
    void checkBook(){
        try{
            int i=getKind();//获取查找类型
            if(i==1)nameCheck();//名称查找
            else numCheck();//序号查找
        }catch(InsException e){//捕获输入异常,输出信息
            System.out.println("命令输入错误,请根据提示输入数字");
            checkBook();//重新调用找书程序
        }catch(BookException e){//捕获书籍不存在异常,输出信息
            System.out.println("图书不存在");
            checkBook();//重新调用找书程序
        }
    }
//获取查找类型
    int getKind()throws InsException{
        Scanner in=new Scanner(System.in);
        int ins=0;
        System.out.println("输入命令:1、名称 2、序号");
        try{
            ins=in.nextInt();
            if(ins==1 || ins==2) return ins;
            else throw new InsException();//输入数字不是1,2也要抛出异常
        }catch(InputMismatchException e){//捕获来自in.nextInt()的异常
            throw new InsException();//抛出新的异常
        }
    }
//通过名称查找书籍
    void nameCheck()throws BookException{
        Scanner inName=new Scanner(System.in);
        System.out.println("输入图书名称:");
        String name=inName.next();
        for(String book:books){
            if(book.equals(name)){
                System.out.println("book: "+name);
                return;//如果找到匹配项则直接返回
            }
        }
        throw new BookException();//for循环结束还没找到,抛出异常
    }
//通过序号查找异常
    void numCheck()throws BookException,InsException{
        Scanner inNum=new Scanner(System.in);
        System.out.println("输入图书序号:");
        try{
            int num=inNum.nextInt();
            if(num>0 && num<5)
                System.out.println("book: "+books[num-1]);
            else throw new BookException();//序号超出范围,输出异常
        }catch(InputMismatchException e){//捕获来自inNum.nextInt()的异常
            throw new InsException();//抛出输入有误异常
        }
    }
}

最后是自定义异常

//输入有误异常
class InsException extends Exception
{
    InsException(){super();}
}
//图书不存在异常
class BookException extends Exception
{
    BookException(){super();}
}
点赞