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