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() 函數!