Java入门第三季1.9问题编码 Plus版

原程序功能进行了简化,不需要用户说明输入的是序号还是书名,程序可以自动判断^-^
先说一下原理。两种搜索途径参数是不同的,实现的方法也是不同的,所以不能混合在一起,还是作为两种独立的方法存在,这样修改起来也比较简单,那么关键就在于根据输入的信息判断搜索方法
选择路径还是作为一个单独的方法来使用,只不过判断条件不再相同。我选择的判断条件是是否可以将输入信息转换为int类型,可以转换就使用序号查找,否则调用名称查找。
try…catch有点类似if…else,不同的是try…catch判断的是语句是否出错。在try块中放入一个可能出错的语句,如果该语句没有错误,程序就会继续运行try块中剩下的内容,否则会被对应的catch捕获,运行catch中的内容。所以Integer.parseInt();就是判断语句
下边是代码
主程序改了下名字

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

借书系统,主要更改了路径选择方法

class LendBook
{
    private String[] books=new String[4];
    private String road;//存储从控制台输入的信息,用来判断搜索方法,并作为搜索参数
//初始化书籍
    void initialBook(){
        books[0]="西游记";
        books[1]="三国演义";
        books[2]="水浒传";
        books[3]="红楼梦";
    }
//找书总程序,在这里调用不同的找书途径,自定义异常在这里catch
    void checkBook(){
        Scanner in=new Scanner(System.in);
        System.out.println("输入书名或者序号查找书籍:");
        try{
            road=in.next();
            if(checkKind())numCheck();//road可以转换为数字
            else nameCheck();//road不能转换为数字
        }catch(BookException e){//捕获书籍不存在异常,输出信息
            System.out.println("图书不存在");
            checkBook();//重新调用找书程序
        }
    }
//根据输入数据判断使用何种搜索方式
    boolean checkKind(){
        try{
            int i=Integer.parseInt(road);
            return true;//返回值为true说明转换成功,意味着数字搜索
        }catch(Exception e){
            return false;//返回值为false说明转换出错,使用名称搜索
        }
    }

//通过名称查找书籍
    void nameCheck()throws BookException{
        String name=road;
        for(String book:books){
            if(book.equals(name)){
                System.out.println("book: "+name);
                return;//如果找到匹配项则直接返回
            }
        }
        throw new BookException();//for循环结束还没找到,抛出异常
    }
//通过序号查找异常
    void numCheck()throws BookException{
        int num=Integer.parseInt(road);

        if(num>0 && num<5)
            System.out.println("book: "+books[num-1]);
        else throw new BookException();//序号超出范围,输出异常
    }
}

自定义异常现在只需要一个就够了

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