作業問題.當提示輸入命令時,輸入a(非int類型),就會捕獲輸入類型錯誤。按理,它應該能回去循環,重新輸入命令,結果它停不下來了。求解
package?imooc_java_3_1_9; import?java.util.InputMismatchException; import?java.util.Scanner; import?java.util.*; /* ?*?1.定義字符串數組保存書籍信息 ?*? ?*?2.提示用戶輸入,分別按“書名”和“圖書序號”查找圖書 ?*? ?*?3.根據輸入的信息進行適當的異常處理 ?*? a.如果輸入類型錯誤,拋出“錯誤命令異?!?,并提示重新輸入 ?*? b.如果書名不存在,拋出“圖書不存在異常”,并提示重新輸入 ?*? c.如果圖書序號超過字符串數組范圍,拋出“圖書不存在異?!?,并提示重新輸入 ?*/ public?class?RunThisProject?{ //根據書名查找圖書 public?void?searchAsName?(?String?bookName,String?[]?bookInfo)?throws?Exception?{ int?checkIfHave?=?0;//用于計數,若存在和書名一樣的書則+1 //遍歷圖書信息數組,和輸入的書名比對,若書名存在,則輸出書名,否則拋出“圖書不存在”異常 for(int?i?=?0;?i?<?bookInfo.length;?i++){ if(bookName.equals(bookInfo[i])){ System.out.println("book:"+bookInfo[i]); checkIfHave?++; } } if(checkIfHave?<?1){ throw?new?Exception("圖書不存在!"); } } //根據序號查找圖書 public?void?searchAsNo(int?bookNo?,?String[]?bookInfo)throws?Exception?{ // 如果輸入的圖書序號小于最小下標0?或?大于最大下標,即超出數組范圍,則提示異?!按藞D書序號不存在”,否則輸出序號對應圖書名 if((bookNo?<?0)||(bookNo?>?bookInfo.length?)){ throw?new?Exception("此圖書序號不存在!"); }else{ System.out.println("book:"+bookInfo[bookNo]); } } public?static?void?main(String[]?args)?throws?Exception??{ String[]?bookInfo?=?new?String[]{"高等數學","大學物理","大學英語","軟件工程","線性代數"};//用字符串數組存儲圖書信息 RunThisProject?rtp1?=?new?RunThisProject();//實例化RunThisProject類的對象,用于調用此類中的方法 Scanner?input?=?new?Scanner(System.in); boolean?controler?=?true;//用于控制循環是否繼續 while(controler){ System.out.println("請輸入命令:1-按照名稱查找圖書 2-按照圖書序號查找圖書"); try{ int?checkWay?=?0;?//存儲用戶的選擇 checkWay?=?input.nextInt(); // 如果選擇1-按照名稱查找圖書 if(checkWay?==?1){ System.out.println("請輸入您要查找的圖書名稱:");//提醒用戶輸入 String?bookName;//存儲用戶輸入的書名 bookName?=?input.next();//輸入書名 rtp1.searchAsName(bookName,?bookInfo);//調用searchAsName方法 } // 如果選擇2-按照圖書序號查找圖書 if(checkWay?==?2){ System.out.println("請輸入您要查找的圖書序號:");//提示用戶輸入圖書序號 int?bookNo?=?input.nextInt();//輸入序號 rtp1.searchAsNo(bookNo,?bookInfo);//調用searchAsNo方法 } controler?=?false;//若正常執行,無異常,則讓controler借書,停止while循環 }catch(InputMismatchException?e?){//捕獲輸入類型不符合的異常 System.out.println("命令輸入錯誤,請根據提示輸入數字命令!"); }catch(Exception?e2){//捕獲圖書檢測的異常,此圖書不存在?或?此序號不存在?兩種異常 System.out.println(e2.getMessage()); } } System.out.println("程序結束了!"); } }
附上可能的問題,求解決問題。
When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.?
2016-02-27
把Scanner input=new Scanner(System.in)塞到try的肚子里面去
2016-02-14
已解決。