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.關閉掃描儀會報錯
}
2019-06-04
InputClassException()方法少了個結束的括號