作業(yè)的疑問(wèn)
package?sentBook; import?java.util.Arrays; import?java.util.InputMismatchException; import?java.util.Scanner; public?class?sentBook?{ String[]?book?=?new?String[]{"你好,中國(guó)",?"九型人格",?"Java123",?"面向?qū)ο缶幊?,?"美文如歌"}; Scanner?scan?=?new?Scanner(System.in); public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub sentBook?sent?=?new?sentBook(); sent.welcome(); } /*歡迎界面? ?*同時(shí)對(duì)輸入進(jìn)行校驗(yàn)? ?*/ public?void?welcome(){ System.out.println("輸入命令:1-按照名稱(chēng)查找圖書(shū);2-按照序號(hào)查找圖書(shū);"); int?select?=?0; try{ select?=?new?Scanner(System.in).nextInt(); }catch(InputMismatchException?e){ System.out.println("命令輸入錯(cuò)誤!請(qǐng)按照提示輸入數(shù)字命令!"); this.welcome(); } try{ if(select?==?1?){ this.sentName(); }else?if(select?==?2){ this.sentNum(); }else?if(select?==?0){ System.out.println("fuck!"); } else{ throw?new?Exception(); } }catch(Exception?e){ System.out.println("請(qǐng)按照提示輸入正確命令!"); this.welcome(); } return; } /* ?*?按名稱(chēng)查書(shū) ?*/ public?void?sentName(){ System.out.println("輸入圖書(shū)名稱(chēng):"); String?name?=?scan.next(); String?books?=?Arrays.toString(book); if(books.indexOf(name)?!=?-1){ System.out.println("book:"?+?name); }else{ System.out.println("圖書(shū)不存在!"); this.welcome(); } } /* ?*?按序列號(hào)查書(shū) ?*/ public?void?sentNum(){ System.out.println("輸入圖書(shū)序號(hào):"); int?num?=?scan.nextInt(); if(num?<=?book.length+1){ System.out.println("book:"?+?book[num?-?1]); }else{ System.out.println("圖書(shū)不存在!"); this.welcome(); } } }
代碼如圖所示,現(xiàn)在有一個(gè)問(wèn)題,具體的輸出如下:
輸入命令:1-按照名稱(chēng)查找圖書(shū);2-按照序號(hào)查找圖書(shū);
a
命令輸入錯(cuò)誤!請(qǐng)按照提示輸入數(shù)字命令!
輸入命令:1-按照名稱(chēng)查找圖書(shū);2-按照序號(hào)查找圖書(shū);
1
輸入圖書(shū)名稱(chēng):
九型人格
book:九型人格
fuck!
最開(kāi)始是因?yàn)榘l(fā)現(xiàn)一個(gè)問(wèn)題,如果第一次輸入錯(cuò)誤,那么在正確的輸入以及查詢(xún)結(jié)束后,會(huì)繼續(xù)循環(huán)一次查詢(xún)。利用斷點(diǎn)調(diào)試發(fā)現(xiàn),第一次輸入錯(cuò)誤并之后正確執(zhí)行了一次查詢(xún)后,會(huì)繼續(xù)對(duì)輸入的select值進(jìn)行判斷,而且是默認(rèn)的0。如果把這個(gè)默認(rèn)的select賦值去掉的話,程序會(huì)報(bào)錯(cuò)。
想請(qǐng)教一下,怎樣才能在正確執(zhí)行一次查詢(xún)后直接結(jié)束程序,而不是繼續(xù)對(duì)select值進(jìn)行判斷。
2015-01-19
你的代碼錯(cuò)了,第一步你輸入a后拋出異常,但被你捕獲了,所以先執(zhí)行了welcome(),再接著往下執(zhí)行,也就是說(shuō)你輸入一個(gè)a時(shí),你的if...else if同樣還是被執(zhí)行了
2015-01-19
已修改代碼
2015-01-19
if...else if...本身就是正確執(zhí)行一次后就不再執(zhí)行別的判斷了,所以你這邊的問(wèn)題應(yīng)該是邏輯錯(cuò)誤