【问题标题】:Recreating Scanner in Java用 Java 重新创建扫描仪
【发布时间】:2019-10-07 09:06:38
【问题描述】:

我正在用 java 编写游戏,我有一个方法要求用户从控制台输入值:

public String getUserInput() {
    try (Scanner scan = new Scanner(System.in)) {
        String s = scan.nextLine();
        return s;
    }
}

问题是我想调用这个方法不同的次数取决于外部参数,我事先不知道,我会再次调用还是不调用。

但是当我为第二次调用调用这样的方法时 - 我得到了

Exception in thread "main" java.util.NoSuchElementException: No line found

问题:

  • 我不明白这个错误的根本原因:我知道我不能 重新打开扫描仪,但在这里我没有重新打开它,而是重新创建它。
  • 我该如何处理?

【问题讨论】:

标签: java console


【解决方案1】:

不要重新打开或重新创建它。在您的程序期间使用一个Scanner

关闭Scanner(在本例中,使用try-with-resources 块)将关闭其输入,在本例中为System.in。您不想关闭它,因为您无法重新打开它。

【讨论】:

  • 是的,但是什么时候关闭呢?我应该在程序结束时手动关闭它吗?但是如果我的程序以异常结束,在这种情况下扫描仪将不会关闭
  • 是的,你应该在最后手动关闭它。如果你的程序异常结束,Scanner 也会消失。一旦你的程序消失了,它就不会继续存在了。
  • 不,(我不建议)关闭扫描仪(在这种情况下),因为它也会关闭System.in,而你真的不想这样做。让JVM来处理
猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多