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.关闭扫描仪会报错 }
InputClassException()方法少了个结束的括号