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

2019-05-12 08:35发布

所以我想我的程序读取一个输入,其中有一行一些整数,例如:

1 1 2

那么它应该分别读取每一个整数,并在新行打印。 整数程序具有读取事先没有给出,数量等什么,我要做的是使用while循环,之后有没有更多的整数读哪个结束。 这是我写的代码:

while (scan.hasNextInt()) {
    int x = scan.nextInt();
    System.out.println(x);
}

但它不能正常工作,因为循环永远不会结束,它只是希望用户输入多个整数。 我缺少的是在这里吗?

Answer 1:

您的扫描仪基本上是等待,直到文件的末尾进来。如果你在不发生控制台使用它,所以它会继续运行。 尝试从文件中读取整数,你会发现你的程序将终止。

如果你是新来从文件中读取,创建一个test.txt项目文件夹,并用Scanner scan = new Scanner(new File("test.txt")); 与您的代码。



Answer 2:

hasNextInt呼叫阻塞 ,直到它有足够的信息来做出的“是/否”的决定。

按Ctrl + Z键上的Windows(或上的“UNIX” CTRL + d)以关闭标准输入流并触发EOF 。 或者,在非整数和输入

控制台输入通常是行缓冲: 输入必须按下(或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>)

也可以看看:

  • 如何获得Java的hasNextInt()停止等待整数,而无需输入一个字符?
  • hasNext() -当它阻止,为什么?
  • Java的扫描仪hasNext()不返回false


Answer 3:

如果你喜欢的行之后停止你的循环,创建您的Scanner是这样的:

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);
    }

}

关键是要定义一个包含空格分隔符,空的表达,但不下一行字符。 通过这种方式, Scanner看到\n后跟一个分隔符(什么)然后按回车键后输入停止。

实施例:1 2 3 \ n会给以下标记:整数(1),整数(2),整数(3),非整数(\ n)的因此hasNextInt返回false。



文章来源: How to use .nextInt() and hasNextInt() in a while loop