Java扫描程序运行时错误Java.util.NoSuchElementException
我写了一个java代码,使用了一些使用Scanner的方法。第一种方法工作得很好,但第二种方法得到了错误的堆栈 “java.util.NoSuchElementException” 第一种方法的代码maxPile: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 =
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(...)) {
...
}