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!
推薦閱讀:
- Java Scanner對象中hasNext()與next()方法的使用
- java異常:異常處理–try-catch結構詳解
- Java while(scanner.hasNext())無法跳出的解決方案
- java編程學習輸入輸出詳解看完快速上手
- 新手初學Java流程控制