2017-08-31 35 views

回答

1

的答案很簡單:

Scanner#nextInt()讀取下一個整數,但不換行(ENTER)用戶按下提交整數。

要理解這一點,你必須知道你輸入將被寫入緩衝區,從該Scanner方法試圖從閱讀這一切。


考慮下面的例子:

System.out.println("Enter a number: "); 
int i = scanner.nextInt(); 
System.out.println("Enter a line: "); 
String l = scanner.nextLine(); 

會發生什麼:

  • 用戶看到Enter a number:並將按17ENTER
  • 掃描儀將讀取17但離開ENTER的換行符。
  • 程序將寫Enter a line:但掃描器會讀,而不是等待輸入ENTER的換行符。
+0

爲什麼當我提交input.nextLine時不會發生這種情況嗎? – Incognelo

+1

'nextLine(...)'直到一個換行符發現讀取所有輸入。那麼換行符會被消耗掉 – ParkerHalo

+0

感謝你的幫助 – Incognelo

0

這是purly設計決定,原因nextInt()不消耗換行符,是因爲有可能是還沒有被解析一些其它標記,這將是最不恰當的假設什麼都不剩在字符串中,並使用換行符char。

例如,您將得到下面的輸入
123 123 \n

調用nextInt()將導致剩餘在緩衝
123 \n

再次調用nextInt()以下字符串,
\n

+0

感謝你的幫助 – Incognelo

相關問題