java - 如何使用扫描仪类 : Exception in thread "main". 解决此错误 ..?

标签 java error-handling runtime

这个问题在这里已经有了答案:





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 只能在退出循环后关闭。

我只能想到两种解释:

  • 这不是你在ideone上运行的代码。
  • 实现 ideone 的家伙已经调整了标准 Scanner 类的行为。以一种莫名其妙的方式……对我来说。
  • 关于java - 如何使用扫描仪类 : Exception in thread "main". 解决此错误 ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942001/

    相关文章:

    c++ - 基于用户输入的运行时函数规范

    java - 创建/更新序列 - MongoDB

    delphi - 在delphi中调用DLL时发生异常?

    r - 如果错误大于R

    java - 分配一个变量,实际发生了什么,Java

    JAVA以及如何执行用户代码

    java - Eclipse编辑器问题: It only shows one element instead of whole source code!

    java - 枚举上的 JPQL LIKE 表达式

    Java:帮助构造 fillTextFields() 方法

    jenkins - 有没有办法检查作业的 jenkins 输出,如果字符串存在则使作业成功,否则失败?