Java扫描器运行时错误java.util.NoSuchElementException

时间:2019-02-02 22:26:51

标签: java

我用一些使用Scanner的方法编写了一个Java代码。第一个方法运行良好,但是第二个方法出现错误

  

“ java.util.NoSuchElementException”。

第一个方法 maxPile 的代码:

 public static int maxPile() {
    Scanner scan = new Scanner(System.in);
    System.out.println("enter max number of piles");
    int pMax = scan.nextInt();
    scan.close();
    return pMax;
}

第二种方法 maxMatches 的代码:

public static int maxMatches() {
    Scanner scan = new Scanner(System.in);
    System.out.println("enter max number of matches per pile");
    int mMax = scan.nextInt();
    scan.close();
    return mMax;
}

的方法是相同的,但是第一工作,所述第二不... 我的输出-

enter max number of piles
8
enter max number of matches per pile
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at autoNim.autoNim.maxMatches(autoNim.java:89)
at autoNim.autoNim.main(autoNim.java:12)

(“ 8”是我的输入,第12行调用方法MaxMatches,第89行是方法中的xint mMax=scan.nextInt();

1 个答案:

答案 0 :(得分:2)

说明

这是因为你关闭了扫描仪。关闭扫描程序总是会关闭基础资源,即System.in。关闭System.in后,您将无法再使用它。

请勿关闭System.in绑定的扫描仪。

资源只能由打开资源的人关闭。 JVM打开了System.in,并且在程序完成时也会再次关闭它。您无需管理System.in,请保持开放状态。


异常安全关闭

请注意,如果你想关闭扫描仪,你必须确保它是异常安全的。即你需要的的try-catch-最后的把它包起来。如果可能的话,最好使用 try-with-resources

try (Scanner scanner = new Scanner(...)) {
    ...
}

将自动关闭它在一个异常安全的方式后的试块的。