Scanner獲取鍵盤(pán)輸入總是出錯(cuò),比如我輸入"英語(yǔ)",debug里顯示的值有時(shí)是"yingyuying英語(yǔ)",有時(shí)候又是正常的"英語(yǔ)",請(qǐng)問(wèn)是源碼哪里有問(wèn)題嗎?
package?Library; import?java.util.Scanner; public?class?Test03?{ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub Book?[]?bookForBorrow={new?Book(1,"高數(shù)"),new?Book(2,"線代"),new?Book(3,"工數(shù)") ??????? ?,new?Book(4,"電路"),new?Book(5,"模電"),new?Book(6,"數(shù)電"), ??????? ?new?Book(7,"英語(yǔ)"),new?Book(8,"毛概")}; ????????System.out.println("歡迎使用圖書(shū)館借書(shū)系統(tǒng)!輸入:1-按名稱(chēng)查找書(shū)籍??2-按序號(hào)查找書(shū)籍"); ????????Scanner?sc=new?Scanner(System.in); ???????? ???????? int?i=sc.nextInt(); ????????try{ ???????? if(i!=1?&&?i!=2){ ???????? throw?new?BadCommand("輸入有誤!請(qǐng)按提示輸入數(shù)字命令"); ???????? } ???????? ????????if(i==1){ ???????? System.out.println("請(qǐng)輸入圖書(shū)名稱(chēng):"); ???????? String?name=sc.next();//就是這里總是出錯(cuò)! ???????? int?f=0; ???????? for(Book?book:bookForBorrow){ ???????? if(book.getBookname().equals(name)){ ???????? f=1; ???????? String?fName="book:"+name; ???????? System.out.println(fName); ???????? break; ???????? } ???????? } ???????? if(f==0){ ???????? throw?new?NoExist("圖書(shū)不存在!"); ???????? } ????????}else?if(i==2){ ???????? System.out.println("請(qǐng)輸入圖書(shū)序號(hào):"); ???????? int?k=sc.nextInt(); ???????? int?m=0; ???????? for(int?a=0;a<bookForBorrow.length;a++){ ???????? if(bookForBorrow[a].getOrderNum()==k){ ???????? String?fname="book:"+bookForBorrow[a].getBookname(); ???????? System.out.println(fname); ???????? m=1; ???????? break; ???????? } ???????? } ???????? if(m==0){ ???????? throw?new?NoExist("圖書(shū)不存在!"); ???????? } ????????} ????????}catch(BadCommand?e1){ ???????? System.out.println(e1.getMessage()); ????????} ????????catch(NoExist?e2){ ???????? System.out.println(e2.getMessage()); ????????} } } //測(cè)試 package?Library; import?java.util.Scanner; public?class?Test02?{ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub ?????????????Scanner?sc=new?Scanner(System.in); ?????????????System.out.println("請(qǐng)輸入:"); ?????????????String?name=sc.next();//這里接收到的字符串又是對(duì)的。 ?????????????Book?[]?bookForBorrow={new?Book(1,"高數(shù)"),new?Book(2,"線代"),new?Book(3,"工數(shù)") ???????????? ?,new?Book(4,"電路"),new?Book(5,"模電"),new?Book(6,"數(shù)電"), ???????????? ?new?Book(7,"英語(yǔ)"),new?Book(8,"毛概")}; ?????????????for(int?i=0;i<bookForBorrow.length;i++){ ???????????? ?/*if(book.getBookname().equals(name)){ ???????????? ?String?fName="book:"+name; ???????????? ?System.out.println(fName); ???????????? ?break;*/ ???????????? ?if(bookForBorrow[i].getBookname().equals(name)){ ???????????????? ?String?fName="book:"+name; ???????????????? ?System.out.println(fName); ???????????????? ?break; ???????????? ?} ?????????????} ?????????????System.out.println("over!"); } }
補(bǔ)充一個(gè)我測(cè)試的代碼,這個(gè)接收到的又是對(duì)的
2016-11-18
如果沒(méi)有任何調(diào)整時(shí)輸入,光標(biāo)位置不在最后 直接輸入中文會(huì)有帶剛才輸入的中文
但是如果把光標(biāo)在最后面點(diǎn)一下 ?然后再輸入,就可以正常輸入中文了 這應(yīng)該是Eclipse的一個(gè)BUG 畢竟是國(guó)外的軟件 對(duì)中文優(yōu)化并不是很好 輸入數(shù)字 英文好像就沒(méi)這問(wèn)題
2016-11-01
你換成nextline呢?