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,"高數"),new?Book(2,"線代"),new?Book(3,"工數")
??????? ?,new?Book(4,"電路"),new?Book(5,"模電"),new?Book(6,"數電"),
??????? ?new?Book(7,"英語"),new?Book(8,"毛概")};
????????System.out.println("歡迎使用圖書館借書系統!輸入:1-按名稱查找書籍??2-按序號查找書籍");
????????Scanner?sc=new?Scanner(System.in);
????????
???????? int?i=sc.nextInt();
????????try{
???????? if(i!=1?&&?i!=2){
???????? throw?new?BadCommand("輸入有誤!請按提示輸入數字命令");
???????? }
????????
????????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,"高數"),new?Book(2,"線代"),new?Book(3,"工數")
???????????? ?,new?Book(4,"電路"),new?Book(5,"模電"),new?Book(6,"數電"),
???????????? ?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
如果沒有任何調整時輸入,光標位置不在最后 直接輸入中文會有帶剛才輸入的中文
但是如果把光標在最后面點一下 ?然后再輸入,就可以正常輸入中文了 這應該是Eclipse的一個BUG 畢竟是國外的軟件 對中文優化并不是很好 輸入數字 英文好像就沒這問題
2016-11-01
你換成nextline呢?