pat*_*smh 3 java input while-loop java.util.scanner
所以我希望我的程序读取一个输入,它在一行中有一些整数,例如:
1 1 2
然后它应该分别读取每个整数并以新行打印它.程序必须读取的整数数量不是事先给出的,所以我要做的是使用while循环,在没有更多的整数读取之后结束.这是我写的代码:
while (scan.hasNextInt()) {
int x = scan.nextInt();
System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)
但它没有正常工作,因为循环永远不会结束,它只是希望用户输入更多的整数.我在这里错过了什么?
该hasNextInt调用块,直到它有足够的信息来做出的"是/否"的决定.
在Windows上按Ctrl + Z(或在"unix"上按Ctrl + D)关闭标准输入流并触发EOF.或者,键入非整数并按Enter键.
控制台输入通常是行缓冲:必须按下输入(或EOF触发),并且将立即处理整行.
示例,其中^ Z表示Ctrl + Z(或Ctrl + D):
1 2 3<enter>4 5 6^Z -- read in 6 integers and end because stream closed
-- (two lines are processed: after <enter>, after ^Z)
1 2 3 foo 4<enter> -- read in 3 integers and end because non-integer found
-- (one line is processed: after <enter>)
Run Code Online (Sandbox Code Playgroud)
也可以看看:
您的扫描仪基本上会等到文件结尾到来。如果您在控制台中使用它,则不会发生这种情况,因此它将继续运行。尝试从文件中读取整数,您会发现您的程序将终止。
如果您不熟悉读取文件,请test.txt在项目文件夹中创建一个 并Scanner scan = new Scanner(new File("test.txt"));与您的代码一起使用。