nextLine和next的區別
今天在寫一個java小程式中碰到一個問題:迴圈輸入時,我的下次輸入會跳過nextline這個輸入語句;
如下所示,剛開始沒有找到原因,後來發現是nextLine()的問題,所以寫下來提醒自己
輸入商品名:y
輸入商品價格:56
輸入商品數量:6
dsf
1
[Goods [name=y, price=56.0, num=6]]
輸入商品名:輸入商品價格:
next()
next()方法在讀取輸入內容時,會過濾掉有效字元前面的無效字元,對輸入有效字元之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其過濾掉;只有在讀取到有效字元之後,next()方法才將其後的空格鍵、Tab鍵或Enter鍵等視為結束符;所以next()方法不能得到帶空格的字串,所有的
nextLine()
而nextLine()方法的結束符只有Enter鍵,不會過濾輸入文字前的空格和其他鍵值
程式碼的部分擷取
Goods good;
int i=0;
double ss=0;
Scanner scanner = new Scanner(System.in);
List<Goods> a = new ArrayList<Goods>();
while(true) {
good= new Goods();
System.out.print("輸入商品名:");
String name = scanner.nextLine();//用的nextLine();
good.setName(name);
System.out.print("輸入商品價格:");
double price = scanner.nextDouble();
good.setPrice(price);
System.out.print("輸入商品數量:");
int num = scanner.nextInt();
good.setNum(num);
if(name.isEmpty()) {
break;
}else {
a.add(good);
i++;
System.out.println("dsf");
System.out.println(i);
System.out.println(a);
}
}
執行輸入:在最後的商品數量的後面添加了幾個空格,可以發現這後面的空格被nextLine() 自動捕捉了,
但還有一個問題,我在最後輸入商品按下enter後,也會出現商品名無法輸入的問題:
後來在網上看到了這樣的一句話:
nextLine()自動讀取了被next()去掉的Enter作為他的結束符,所以沒辦法從鍵盤輸入值。
修改的辦法就是將nextLine改為next,或者在後面結束語句後面在加上一句:scanner.nextLine();