Java 如何在while循环中使用.nextInt()和hasNextInt()
所以我希望我的程序读取一个输入,它在一行中有一些整数,例如: 1 1 2 然后它应该分别读取每个整数,并在新行中打印它。程序必须读取的整数数量没有预先给出,因此我尝试使用while循环,在没有更多整数可读取后结束。这是我写的代码:Java 如何在while循环中使用.nextInt()和hasNextInt(),java,input,while-loop,java.util.scanner,Java,Input,While Loop,Java.util.scanner,所以我希望我的程序读取一个输入,它在一行中有一些整数,例如: 1 1 2 然后它应该分别读取每个整数,并在新行中打印它。程序必须读取的整数数量没有预先给出,因此我尝试使用while循环,在没有更多整数可读取后结束。这是我写的代码: while (scan.hasNextInt()) { int x = scan.nextInt(); System.out.println(x); } 但是它不能正常工作,因为循环永远不会结束,它只是希望用户输入更多的整数。我错过了什么 您的扫描仪
while (scan.hasNextInt()) {
int x = scan.nextInt();
System.out.println(x);
}
但是它不能正常工作,因为循环永远不会结束,它只是希望用户输入更多的整数。我错过了什么 您的扫描仪基本上会等待文件的结尾。如果您在控制台中使用它,则不会发生这种情况,因此它将继续运行。尝试从文件中读取整数,您将注意到程序将终止
如果您不熟悉读取文件,请在项目文件夹中创建一个
test.txt
,并使用Scanner scan=new Scanner(新文件(“test.txt”)代码>与您的代码一起使用。您的扫描仪基本上会等待文件的结尾。如果您在控制台中使用它,则不会发生这种情况,因此它将继续运行。尝试从文件中读取整数,您将注意到程序将终止
如果您不熟悉读取文件,请在项目文件夹中创建一个test.txt
,并使用Scanner scan=new Scanner(新文件(“test.txt”)使用您的代码进行编码。该hasnetint
调用将阻塞,直到它有足够的信息来决定“是/否”
按下可关闭并触发一个。或者,键入非整数并按enter键
控制台输入通常是行缓冲的:必须按下enter(或触发EOF)并立即处理整个行
示例,^Z表示Ctrl+Z(或Ctrl+D):
123456^Z——读入6个整数并结束,因为流已关闭
--(处理两行:在^Z之后,在^Z之后)
1 2 3 foo 4--读入3个整数并结束,因为找到了非整数
--(处理一行:之后)
另见:
hasnetint
调用阻塞,直到它有足够的信息来决定“是/否”
按下可关闭并触发一个。或者,键入非整数并按enter键
控制台输入通常是行缓冲的:必须按下enter(或触发EOF)并立即处理整个行
示例,^Z表示Ctrl+Z(或Ctrl+D):
123456^Z——读入6个整数并结束,因为流已关闭
--(处理两行:在^Z之后,在^Z之后)
1 2 3 foo 4--读入3个整数并结束,因为找到了非整数
--(处理一行:之后)
另见:
如果您想在测线后停止循环,请按如下方式创建扫描仪:
public static void main(final String[] args) {
Scanner scan = new Scanner(System.in).useDelimiter(" *");
while (scan.hasNextInt() && scan.hasNext()) {
int x = scan.nextInt();
System.out.println(x);
}
}
诀窍是定义一个包含空格、空表达式但不包含下一行字符的分隔符。
这样,扫描器
就会看到\n
后面跟着一个定界符(无),按下return键后输入停止
例如:
1 2 3\n
将提供以下代币:
整数(1)、整数(2)、整数(3)、非整数(\n)
因此,hasnetint
返回false。如果您想在行后停止循环,请按如下方式创建扫描仪:
public static void main(final String[] args) {
Scanner scan = new Scanner(System.in).useDelimiter(" *");
while (scan.hasNextInt() && scan.hasNext()) {
int x = scan.nextInt();
System.out.println(x);
}
}
诀窍是定义一个包含空格、空表达式但不包含下一行字符的分隔符。
这样,扫描器
就会看到\n
后面跟着一个定界符(无),按下return键后输入停止
例如:
1 2 3\n
将提供以下代币:
整数(1)、整数(2)、整数(3)、非整数(\n)
因此,hasNextInt
返回false