在回答這個問題,我不明白爲什麼input.nextInt
有一個換行符作爲剩。爲什麼input.nextint方法有 n作爲剩餘物?
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?
在回答這個問題,我不明白爲什麼input.nextInt
有一個換行符作爲剩。爲什麼input.nextint方法有 n作爲剩餘物?
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?
的答案很簡單:
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:
並將按17
和ENTER
。17
但離開ENTER
的換行符。Enter a line:
但掃描器會讀,而不是等待輸入ENTER
的換行符。這是purly設計決定,原因nextInt()
不消耗換行符,是因爲有可能是還沒有被解析一些其它標記,這將是最不恰當的假設什麼都不剩在字符串中,並使用換行符char。
例如,您將得到下面的輸入 123 123 \n
調用nextInt()
將導致剩餘在緩衝 123 \n
再次調用nextInt()
以下字符串, \n
感謝你的幫助 – Incognelo
爲什麼當我提交input.nextLine時不會發生這種情況嗎? – Incognelo
'nextLine(...)'直到一個換行符發現讀取所有輸入。那麼換行符會被消耗掉 – ParkerHalo
感謝你的幫助 – Incognelo