为什么关闭扫描仪似乎会损坏新的扫描仪?

2022-04-02 00:00:00 input io user-input java
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.lose()行的注释,然后再次运行,我会得到以下行为:

由于某些原因,hasNext()方法连续返回FALSE,尽管有非常明显的下一个参数。我尝试了很多方法,但找不到任何解决方法。例如,如果我将代码更改为只

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

然后,它再次适用于第一条语句,但随后立即给出了NoSuchElementException异常。 当然,如果你不关闭第一个扫描仪,它工作得很好。

我不明白为什么关闭一台扫描仪会影响另一台扫描仪,但我听说不关闭扫描仪是不好的做法,更重要的是,如果我不关闭,会出现恼人的黄色错误消息。有人能告诉我解决这个问题的方法吗?为什么会发生这种情况?我可以在main方法中将scanner作为参数传递,也可以在那里关闭它,但这看起来有点混乱。


解决方案

,因为您已关闭System.in。别干那事。不要关闭扫描仪。也不要创造新的。继续用同一个就行了。它仍然可以工作。

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

相关文章