在回答这个问题时,我不明白为什么input.nextInt
有一个换行符作为剩余字符。
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?
答案 0 :(得分: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:
,然后按17
和ENTER
。17
,但保留ENTER
的换行符。Enter a line:
,但扫描程序会读取ENTER
的换行符,而不是等待输入。答案 1 :(得分:0)
这纯粹是一个设计决定,nextInt()
没有消费换行符的原因,是因为可能还有一些其他令牌尚未被解析,这是最不合适的假设字符串中没有任何内容,并使用换行符。
例如,您将获得以下输入
123 123 \n
调用nextInt()
将导致缓冲区中留下以下字符串
123 \n
再次拨打nextInt()
,
\n