Scanner獲取鍵盤輸入總是出錯,比如我輸入"英語",debug里顯示的值有時是"yingyuying英語",有時候又是正常的"英語",請問是源碼哪里有問題嗎?
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,"英語"),new?Book(8,"毛概")}; ????????System.out.println("歡迎使用圖書館借書系統(tǒng)!輸入:1-按名稱查找書籍??2-按序號查找書籍"); ????????Scanner?sc=new?Scanner(System.in); ???????? ???????? int?i=sc.nextInt(); ????????try{ ???????? if(i!=1?&&?i!=2){ ???????? throw?new?BadCommand("輸入有誤!請按提示輸入數(shù)字命令"); ???????? } ???????? ????????if(i==1){ ???????? System.out.println("請輸入圖書名稱:"); ???????? String?name=sc.next();//就是這里總是出錯! ???????? 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("圖書不存在!"); ???????? } ????????}else?if(i==2){ ???????? System.out.println("請輸入圖書序號:"); ???????? 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("圖書不存在!"); ???????? } ????????} ????????}catch(BadCommand?e1){ ???????? System.out.println(e1.getMessage()); ????????} ????????catch(NoExist?e2){ ???????? System.out.println(e2.getMessage()); ????????} } } //測試 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("請輸入:"); ?????????????String?name=sc.next();//這里接收到的字符串又是對的。 ?????????????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,"英語"),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!"); } }
補充一個我測試的代碼,這個接收到的又是對的
2016-11-18
如果沒有任何調(diào)整時輸入,光標(biāo)位置不在最后 直接輸入中文會有帶剛才輸入的中文
但是如果把光標(biāo)在最后面點一下 ?然后再輸入,就可以正常輸入中文了 這應(yīng)該是Eclipse的一個BUG 畢竟是國外的軟件 對中文優(yōu)化并不是很好 輸入數(shù)字 英文好像就沒這問題
2016-11-01
你換成nextline呢?