【问题标题】:NoSuchElement using scanner twiceNoSuchElement 使用扫描仪两次
【发布时间】:2014-04-28 22:15:14
【问题描述】:

我正在编写一个读取用户输入的代码,因此我创建了一个程序来执行此操作,读取并返回字符串。当从另一个过程调用它两次时,返回一个 NoSuchElementException 错误,我不知道为什么。

输入阅读器进程:

    public static String read() {
    
72    Scanner leer = new Scanner(System.in);
73    String entry = leer.nextLine();
74    leer.close();
75    return entry;
    
    }

我是如何使用它的:

...
    System.out.println("input value ");
    String padre = Entrada.read();
    System.out.println("input values ");
27  String reemplazado = Entrada.read();
...

我来了

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at modulocarga.Entrada.leerEntradaUsuario(Entrada.java:73)
    at modulocarga.TablaSimbolica.addTaxonomica(TablaSimbolica.java:27)
    at modulocarga.Principal.main(Principal.java:8)

我第一次调用它时工作正常,然后它崩溃了。会是什么?

【问题讨论】:

标签: java java.util.scanner nosuchelementexception


【解决方案1】:

由于只使用了一个InputStream,因此第二次调用该方法时不再可能从关闭的输入源中读取数据

不要关闭Scanner(或创建Scanner 的单个类实例以在应用程序结束时关闭)

【讨论】:

  • 如果底层流已关闭,则尝试读取该流应该抛出 IOException - 而不是 NSEE
  • 但话又说回来 - 也许ScannerIOException 包装成NSEE
  • 删除 .close() 解决了这个问题,它会带来其他问题吗?没必要?
  • 不,恰恰相反,不要关闭Scanner,除非你想让它失败
【解决方案2】:

这是因为您的扫描仪链接到 System.in,当您关闭扫描仪时,它也会自动关闭 System.in。您想要做的只是关闭您的扫描仪而不关闭 System.in。

这会有所帮助:Close Scanner without closing System.in

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多