簡體   English   中英

掃描儀上的java.util.NoSuchElementException

[英]java.util.NoSuchElementException on scanner

我有一個名為input的掃描器,其代碼如下:

Scanner input = new Scanner(System.in);
    int cFreq = 0;

    System.out
            .println("Enter the symbol which you want to find the frequency of:");
    char s = 'a';
    symbolLoop: while (s == 'a') {
        try {
            s = input.next(".").toLowerCase().charAt(0);
        } catch (InputMismatchException e) {
            System.out.println("Please enter a valid symbol!");
            input.next();
        }
        switch (checkSymbol(s)) {
        case 0:
            s = 'a';
            break;
        case 1:
            break symbolLoop;
        }
    }
    for (int i = 0; i < words.size(); i++) {
        cFreq += words.get(i).find(s, true);
    }
    System.out.println("Number of times " + s + " is in the coded words: "
            + cFreq);
}

但是,當它到達從掃描儀讀取的行時,它將終止,並顯示以下錯誤:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.next(Scanner.java:1418)
at Home.frequency(Home.java:118)
at Menu.select(Menu.java:58)
at Menu.view(Menu.java:17)
at Home.main(Home.java:22)

(家是班級的名稱)。 我不知道是什么原因造成的,不勝感激! :) 謝謝! 編輯:我也嘗試使用此代碼: String str = input.nextLine(); 以相同的方法,但會引發相同的錯誤。

如果來自用戶的數據與"."不匹配"." 正則表達式(可能被定界符-空格包圍) next(".")不會拋出NoSuchElementException ,而不是InputMismatchException

當Scanner甚至不希望有更多數據時,將引發NoSuchElementException異常,在這種情況下,可以確保可能甚至不存在下一個元素。 這種情況只有在Scanner知道數據源將沒有更多元素的情況下才有可能,在Stream的情況下,這是我們將讀取流的全部內容(例如在FileInputStream的情況下)或將其關閉的情況。

對於System.in我們可以假定此流的內容是無限的,因為它是由用戶提供的,因此,當我們嘗試從中讀取內容時,應用程序將等待直到用戶提供其數據為止。 這意味着Scanner拋出NoSuchElementException的唯一方法是關閉System.in時,因此next沒有更多的數據可讀取。
為了避免這種情況,您應該避免關閉正在使用System.in流,因為您將無法在應用程序中再次將其重新打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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