问题是
'n'整数后面的字符。当您调用时
nextInt,扫描程序会读取
int,但不会消耗
'n'其后的字符;而是,它不会占用任何字符。
nextLine做到这一点。这就是为什么您得到空行而不是预期得到的字符串的原因。
假设您的输入包含以下数据:
12345hello
这是输入缓冲区最初的外观(
^代表
Scanner读取下一个数据的位置):
1 2 3 4 5 n h e l l o n^
之后
nextInt,缓冲区如下所示:
1 2 3 4 5 n h e l l o n ^
第一个
nextLine消耗
n,使缓冲区如下所示:
1 2 3 4 5 n h e l l o n ^
现在,该
nextLine呼叫将产生预期的结果。因此,要修复程序,您所需要做的就是向
nextLineafter之后添加另一个调用
nextInt,并丢弃其结果:
k = in.nextInt();in.nextLine(); // Discard 'n'input = in.nextLine();


![无法同时使用Scanner.nextInt()和Scanner.nextLine()[重复] 无法同时使用Scanner.nextInt()和Scanner.nextLine()[重复]](http://www.mshxw.com/aiimages/31/419105.png)
