Java 如何在while循环中使用.nextInt()和hasNextInt()

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); } 但是它不能正常工作,因为循环永远不会结束,它只是希望用户输入更多的整数。我错过了什么 您的扫描仪

所以我希望我的程序读取一个输入,它在一行中有一些整数,例如:

1 1 2

然后它应该分别读取每个整数,并在新行中打印它。程序必须读取的整数数量没有预先给出,因此我尝试使用while循环,在没有更多整数可读取后结束。这是我写的代码:

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