Java扫描程序运行时错误Java.util.NoSuchElementException

Java扫描程序运行时错误Java.util.NoSuchElementException,java,Java,我写了一个java代码,使用了一些使用Scanner的方法。第一种方法工作得很好,但第二种方法得到了错误的堆栈 “java.util.NoSuchElementException” 第一种方法的代码maxPile: public static int maxPile() { Scanner scan = new Scanner(System.in); System.out.println("enter max number of piles"); int pMax =

我写了一个java代码,使用了一些使用Scanner的方法。第一种方法工作得很好,但第二种方法得到了错误的堆栈

“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();
来自该方法)

说明 这是因为你关闭了扫描仪。关闭扫描仪始终会关闭底层资源,即中的系统。关闭
系统后,您将无法再使用它

不要关闭连接到
系统的扫描仪

资源只能由打开它们的人关闭。JVM在
中打开了
系统,当程序完成时,它还会再次关闭它。您不负责管理
系统。在
中,将其保持打开状态


异常安全关闭 请注意,如果要关闭扫描仪,必须确保它是异常安全的。也就是说,你需要用try-catch-finally来包装它。如果可能,更愿意使用“与资源一起尝试”:

在尝试阻止后,将以异常安全的方式自动关闭它。

说明 这是因为你关闭了扫描仪。关闭扫描仪始终会关闭底层资源,即
中的系统。关闭
系统后,您将无法再使用它

不要关闭连接到
系统的扫描仪

资源只能由打开它们的人关闭。JVM在
中打开了
系统,当程序完成时,它还会再次关闭它。您不负责管理
系统。在
中,将其保持打开状态


异常安全关闭 请注意,如果要关闭扫描仪,必须确保它是异常安全的。也就是说,你需要用try-catch-finally来包装它。如果可能,更愿意使用“与资源一起尝试”:


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

的可能重复的可能重复,但不建议使用与系统绑定的多个扫描仪实例。在您的程序中定义多个扫描仪会产生副作用。您可以在下面的链接()上找到详细的解释,但不建议使用与System.in绑定的多个扫描仪实例。在您的程序中定义多个扫描仪会有副作用。您可以在以下链接上找到详细说明:()
try (Scanner scanner = new Scanner(...)) {
    ...
}