作業(yè)問題.當提示輸入命令時,輸入a(非int類型),就會捕獲輸入類型錯誤。按理,它應該能回去循環(huán),重新輸入命令,結果它停不下來了。求解
package?imooc_java_3_1_9; import?java.util.InputMismatchException; import?java.util.Scanner; import?java.util.*; /* ?*?1.定義字符串數(shù)組保存書籍信息 ?*? ?*?2.提示用戶輸入,分別按“書名”和“圖書序號”查找圖書 ?*? ?*?3.根據(jù)輸入的信息進行適當?shù)漠惓L幚??*? a.如果輸入類型錯誤,拋出“錯誤命令異常”,并提示重新輸入 ?*? b.如果書名不存在,拋出“圖書不存在異?!保⑻崾局匦螺斎??*? c.如果圖書序號超過字符串數(shù)組范圍,拋出“圖書不存在異?!?,并提示重新輸入 ?*/ public?class?RunThisProject?{ //根據(jù)書名查找圖書 public?void?searchAsName?(?String?bookName,String?[]?bookInfo)?throws?Exception?{ int?checkIfHave?=?0;//用于計數(shù),若存在和書名一樣的書則+1 //遍歷圖書信息數(shù)組,和輸入的書名比對,若書名存在,則輸出書名,否則拋出“圖書不存在”異常 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("圖書不存在!"); } } //根據(jù)序號查找圖書 public?void?searchAsNo(int?bookNo?,?String[]?bookInfo)throws?Exception?{ // 如果輸入的圖書序號小于最小下標0?或?大于最大下標,即超出數(shù)組范圍,則提示異常“此圖書序號不存在”,否則輸出序號對應圖書名 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[]{"高等數(shù)學","大學物理","大學英語","軟件工程","線性代數(shù)"};//用字符串數(shù)組存儲圖書信息 RunThisProject?rtp1?=?new?RunThisProject();//實例化RunThisProject類的對象,用于調用此類中的方法 Scanner?input?=?new?Scanner(System.in); boolean?controler?=?true;//用于控制循環(huán)是否繼續(xù) 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;//若正常執(zhí)行,無異常,則讓controler借書,停止while循環(huán) }catch(InputMismatchException?e?){//捕獲輸入類型不符合的異常 System.out.println("命令輸入錯誤,請根據(jù)提示輸入數(shù)字命令!"); }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
已解決。