不多说,直接上代码,有什么问题写评论里,我再修改完善
强化版发布,自动判断搜书途径,更少的异常状况,详情请见: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();}
}