package try_catch;
import java.util.InputMismatchException;
import java.util.Scanner;
public class TryCatchPractice2 {
//在类开始声明,则其他方法都能调用
Scanner in=new Scanner(System.in);
NoBookException NoB=new NoBookException();
String[] books={"语文","数学","英语"};
static TryCatchPractice2 trycat=new TryCatchPractice2();
//主函数
public static void main(String[]args) throws NoBookException{
trycat.InputClassException();
}
//命令错误
public void InputClassException()throws NoBookException{
try{
System.out.println("欢迎光临本图书管理系统");
System.out.println("1.书名查询。2.序号查询");
int a=in.nextInt();
switch(a){
case 1: //查找图书
trycat.findBooks();
break;
case 2://查找序号
trycat.findBooksNum();
break;
default:
throw new NoBookException("错误命令,请输入整数1或2");//如果输入数字非1,2则抛出
break;
}catch(NoBookException e){
// InputMismatchException InE=new InputMismatchException();
// InE.initCause(e);
// System.out.println("错误命令,请输入整数1或2");
// 求教如何在扫描仪我输入非int型时会提示错误命令,例如a
e.printStackTrace();
System.out.println("请重新输入:");
InputClassException();
}
}
//查找图书
public void findBooks()throws NoBookException{
System.out.println("请输入您要查询的图书:");
String b=in.next();
try{
for(int i=0;i<books.length;i++){
if(books[i].equals(b)){//如果查询的书名不为空,输出书本信息
System.out.println("查询成功");
}else{//如果查询为空,抛出异常
throw new NoBookException("图书不存在");
}
}
}catch(NoBookException e){
e.printStackTrace();//捕捉到异常后输出异常位置
NoB.initCause(e);
System.out.println("请重新输入:");
InputClassException();//重新进入系统
}
}
//查找序号
public void findBooksNum()throws NoBookException{
System.out.println("请输入您要借阅的图书序号:");
int i=in.nextInt();
try{
if(i<books.length&&i>=0){//如果查询的序号不越界,输出书本信息
System.out.println("查询成功");
System.out.println("您查询的是"+books[i]);
}else{//越界则抛出数组越界异常
throw new NoBookException("序号错误");
}
}catch(NoBookException e){
e.printStackTrace();//捕捉到异常后输出异常位置
NoB.initCause(e);
System.out.println("请重新输入:");
InputClassException();//重新进入系统
}
}
//in.close();//为什么这里打in.close.关闭扫描仪会报错
}