java.util.NoSuchElementException原因及兩種解決方法

java輸入流報錯:

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Unknown Source)
    at java.base/java.util.Scanner.next(Unknown Source)
    at java.base/java.util.Scanner.nextInt(Unknown Source)
    at java.base/java.util.Scanner.nextInt(Unknown Source)

原因分析:

1、可能是因為迭代器多用瞭一次,指向空!

例如:

Scanner iter=new Scanner(System.in);
while(iter.hasNext()) {
    ArrayList<SprintUserStory> undoneUserStoriesList = SprintUtil.getUndoneUserStoriesList(iter.next().getID(),iter.next().getPkey()); 
    if(undoneUserStoriesList.size() >0){
        willdonefeautre--;
     }
}

分析:第二次使用 iter.next() 時,遊標已經指向下一個位置瞭,中間多出來一個空值!

2、在函數中,聲明瞭一個 scanner 對象,並且調用瞭 close 方法,再次啟動 scanner 的時候(或者在另一個函數中重新啟動 scanner 時),就會遇到異常!

解決方法:

1、類如原因一的可以這樣解決,把 iter.next() 賦給一個中間變量:

Scanner iter=new Scanner(System.in);
while (iter.hasNext()) {
    JIRAFeature jirafeaturetemp = iter.next();
    ArrayList<SprintUserStory> undoneUserStoriesList = SprintUtil.getUndoneUserStoriesList(jirafeaturetemp.getID(),jirafeaturetemp.getPkey());
     if(undoneUserStoriesList.size() >0){
        willdonefeautre--;
     }
}

2、類如原因二的可以這樣解決:

使用多次Scanner get=new Scanner(System.in); 但是隻在最後使用 iter.close() 函數;
或者將Scanner get=new Scanner(System.in); 放在所有函數外層,同時在前面加上static修飾符,並且隻在最後使用 iter.close() 函數!

到此這篇關於java.util.NoSuchElementException原因及兩種解決方法的文章就介紹到這瞭,更多相關java.util.NoSuchElementException報錯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: