![](/img/trans.png)
[英]Closing a Scanner throws java.util.NoSuchElementException
[英]java.util.NoSuchElementException Error when closing the Scanner
public class a2 {
public static int read() {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.close();
return num;
}
public static void out (int a, int b) {
System.out.println("Sum: " + (a+b));
System.out.println("Difference: " + (a-b));
System.out.println("Product: " + (a*b));
System.out.println("Quotient: " + ((double)a/(double)b));
System.out.println("Remainder: " + (a%b));
}
public static void main(String[] args) {
System.out.println("Please enter two integers!:");
int a = read();
int b = read();
out(a,b);
}
}
我的代碼確實有一些理解上的問題。 每次運行代碼時,輸入第一個整數后都會收到此錯誤消息。
Java的java.util.Scanner.nextInt(未知源)處的java.util.Scanner.next(未知源)處的線程“主”中的java.util.NoSuchElementException異常。 util.Scanner.nextInt(未知來源)位於a2.read(a2.java:6)位於a2.main(a2.java:22)
我發現,當我刪除“ sc.close();”時, 行,或者當我將兩個變量之一定義為常量時,它都可以正常工作。 有人可以向我解釋嗎?
您就是不能這樣做:
int a = read();
int b = read();
因為read方法關閉了掃描儀並且在后台關閉了來自系統的輸入流...
全局聲明掃描程序對象,並讀取所需的內容,最后將其關閉
private static Scanner sc;
public static int read() {
return sc.nextInt();
}
public static void out(final int a, final int b) {
System.out.println("Sum: " + (a + b));
System.out.println("Difference: " + (a - b));
System.out.println("Product: " + a * b);
System.out.println("Quotient: " + (double) a / (double) b);
System.out.println("Remainder: " + a % b);
}
public static void main(final String[] args) {
System.out.println("Please enter two integers!:");
sc = new Scanner(System.in);
int a = read();
int b = read();
sc.close();
out(a, b);
}
問題是您正在關閉System.in
(Scanner.close()關閉基礎流)。 一旦執行此操作,它將保持關閉狀態,並且無法輸入。 您通常不希望使用標准輸入來執行此操作。
使用sc.Close關閉System.in,當它嘗試再次讀取時將引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.