簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM