提问者:小点点

为什么关闭一个扫描仪似乎会坏了新的扫描仪?[重复]


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

当我尝试运行上面的代码时,它的工作方式如您所料。每次我插入一行时,计算机都会粘贴下一行。

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

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

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

然后,同样,它适用于第一个语句,但随后立即给出一个NoSuchElementException。当然,如果你不关闭第一个扫描仪,它工作正常。

我不明白为什么关闭一个扫描仪会影响另一个,但我听说不关闭扫描仪是不好的做法,更重要的是,如果我不关闭,会有一个恼人的黄色错误信息。谁能告诉我解决这个问题的方法,以及为什么会这样?我可以把扫描器作为一个参数传入main方法,并在那里关闭它,但这看起来有点乱。


共1个答案

匿名用户

因为您关闭了< code>System.in。不要那样做。不要关闭扫描仪。也不要创建新的。继续用同一个就好了。它仍然会工作。

在同一个底层输入上使用多个扫描器确实是不好的做法。您将丢失数据。