这个问题在这里已经有了答案:
java.lang.IllegalStateException: Scanner closed
(1 个回答)
3年前关闭。
import java.util.Scanner;
public class Main {
public static void main(String[]args) {
double num = 0;
double counter = 0;
double ncot = 0;
Scanner scan = new Scanner(System.in);
while (!(num == -1)) {
ncot = scan.nextDouble();
if (ncot == -1) {
System.out.println("The average is: " + (double)(num/counter));
}
else {
num = num+ncot;
counter++;
}
}
scan.close();
}
}
Exception in thread "main" java.lang.IllegalStateException: Scanner closed
at java.util.Scanner.ensureOpen(Scanner.java:1070)
at java.util.Scanner.next(Scanner.java:1465)
at java.util.Scanner.nextDouble(Scanner.java:2413)
代码在 Ideone.com 上运行时似乎触发了错误,但是当我在 eclipse 中运行时它很好。
最佳答案
这真是令人费解。根据已发布的 Scanner
标准版本(Java 6 和 Java 8)的源代码,此时获得该异常的唯一方法是,如果某些东西已经在 close()
对象上调用了 Scanner
。
(请注意,如果您围绕已关闭的输入流、虚拟或 null 实例化 Scanner,您将得到不同的异常。仅当 Scanner
对象的私有(private) closed
标志为 true
时才会发生此特定异常,并且只会发生这种情况当您调用 Scanner.close()
时。)
但是使用您向我们展示的代码,这是不可能的。 Scanner
只能在退出循环后关闭。
我只能想到两种解释:
Scanner
类的行为。以一种莫名其妙的方式……对我来说。 关于java - 如何使用扫描仪类 : Exception in thread "main". 解决此错误 ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942001/