为什么关闭扫描仪似乎打破了新的扫描仪?

时间:2017-07-18 19:13:25

标签: java input io user-input

import java.util.Scanner;

public class Foo {
    public static void main(String[] args) {
        Foo foo = new Foo();
        foo.getNextToken();
        foo.getNextToken();
    }

    public void getNextToken() {
        Scanner s = new Scanner(System.in);
        while (true) {
            if (s.hasNext()) {
                System.out.println(s.nextLine());
                //s.close();
                return;
            }
        }
    }
}

当我尝试运行上面的代码时,它可以正常工作。 每次插入一行时,计算机都会粘贴下一行。

enter image description here

但是,如果我取消注释s.close()行并再次运行,我会收到以下行为:

enter image description here

由于某种原因,尽管明显存在下一个参数,但hasNext()方法仍会连续返回false。我尝试了很多东西,但找不到任何解决方法。例如,如果我将代码更改为

public void getNextToken() {
        Scanner s = new Scanner(System.in);
        System.out.println(s.nextLine());
        s.close();
        return;
    }

然后,它再次适用于第一个语句,但随后立即给出NoSuchElementException。 当然,如果你没有关闭第一台扫描仪,它可以正常工作。

我不明白为什么关闭1扫描仪会影响另一个,但我听说不关闭扫描仪是不好的做法,更重要的是,如果不这样做,会出现恼人的黄色错误信息。任何人都可以告诉我一种方法来解决这个问题,为什么会发生这种情况?我可以将扫描仪作为主要方法中的参数传递,并将其关闭,但这看起来有点混乱。

1 个答案:

答案 0 :(得分:3)

因为您关闭了System.in。不要这样做。不要关闭扫描仪。也不要创造新的。继续使用相同的。它仍然有效。

在同一个底层输入上使用多个扫描程序, 是不好的做法。你会丢失数据。

相关问题