代码片段
while(!((input = sc.nextLine()) != null)) {
sc = new Scanner(input).useDelimiter(" ");
while (sc.hasNextLine()) {
in[index] = sc.next();
index++;
}
if (index < 3 || !in[0].equals("ping")) {
throw new IllegalArgumentException(
"Usage ping <destination> <port number missing> . . . ."
+ in[0] + " " + in[1] + " " + in[2]);
}
}
我想继续阅读用户输入,但在第一次迭代后,我没有找到新的行。扫描仪不会等待用户输入,而是继续前进。 谢谢
答案 0 :(得分:1)
您的顶级while循环正在执行与您想要的相反的操作。首先,它将input
设置为等于sc.nextLine()
,这很好。然后将input
与null
进行比较。如果此比较产生true
,那么您有输入,这意味着循环应该继续。但是,您正在否定该比较的结果,这使得循环在有输入时终止。
删除感叹号,你应该很好。
修改强>
第二个想法,当sc.hasNextLine()
返回false
时,你的内部while循环正在退出。之后,您将通过条件语句并返回到顶部。由于sc.hasNextLine()
已经返回false
,当然sc.nextLine()
将返回null
。输入已经在内部循环中结束,因此外部循环也将退出。