Java Scanner hasNextInt()导致无限循环

时间:2015-11-05 22:55:17

标签: java stack java.util.scanner

我要做的是让用户输入大量数字然后按Enter键,然后立即将所有这些数字存储到堆栈中。我的想法是使用循环遍历所有数字并将它们推送到堆栈中,如下所示:

Stack<Integer> mainBin = new Stack<Integer>();

Scanner scanner = new Scanner(System.in);

while (scanner.hasNextInt()) {          
mainBin.push(scanner.nextInt());
}

然而,即使在我输入多次而没有输入任何新内容之后,它仍然保持在循环中。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

Scanner.hasNextInt()跳过空格以查找下一个标记。因此,它会读取并跳过所有Enter印刷机。然后等待更多输入,因为可能会有更多输入。

在Linux终端中,您可以按Ctrl-D(OS X上可能为Cmd-D?)发送文件结束标记,告诉应用程序没有更多输入(这应该在一行的开头完成)。 This answer表明Ctrl-Z在Windows&#39;中是等价的。命令提示符。

或者,您可以获得应用程序读取的一些特殊输入。 @phatfingers评论说你可以指定要读取的值的数量作为第一个输入。您还可以使用特殊值来表示结束(根据应用程序的需要,0或-1是常见选项),或者甚至可以使用非数字标记,例如&#34; end&#34;。

答案 1 :(得分:0)

您的示例使用scanner.hasNext()。请改用scanner.hasNextInt()