2012-08-08 194 views
1

我不理解爲什麼一個顯示java.lang.NullPointerException是用下面的代碼拋出(在此行:迭代= chapterKeywords [Z] .iterator();) :爪哇迭代在for循環的NullPointerException

Iterator<String> iterator; 

     for (int z = 0; z < chapterKeywords.length; z++) { 

      try { 

       iterator = chapterKeywords[z].iterator(); 
       //exception thrown here after first iteration (i.e., when z = 1) and subsequent ones 

       while (iterator.hasNext()) { 

        System.out.println(iterator.next()); 

       } 

      } catch (Exception e) { 
       ; 
      } 

     } 

雖然我得到NullPointerException,代碼完全執行。僅供參考,chapterKeywords是LinkedList數組,其中每個數組元素是一個LinkedList(例如singleChapterKeywords)。

LinkedList<String>[] chapterKeywords = new LinkedList[numFiles]; 
LinkedList<String> singleChapterKeywords = new LinkedList<String>(); 

雖然該方案看上去一切正常,我想明白爲什麼拋出NullPointerException異常,因爲我想完全消除。基本上,for循環中每次迭代開始時都會拋出異常。我已經修改了代碼以在循環內部創建一個新的迭代器,創建一個迭代器數組等,但它們都產生相同的結果:NullPointerException at iterator = chapterKeywords [z] .iterator();

任何幫助或瞭解消除此異常非常感謝。

所以,這裏是我的問題:

爲什麼會出現在隨後每次迭代上拋出一個NullPointerException異常時,迭代變量被分配到一個新的迭代器?

如何消除此異常?

再次,TIA!

更新:我認爲 LinkedList的的正確填充和工作得很好,但是,唉,這是不是這樣的!謝謝大家的不可估量的幫助!

+5

chapterKey [z]對於一個或多個z值 – Alfabravo 2012-08-08 20:18:39

+0

謝謝。當然,章節關鍵字[z]已經全部結束了! – Luis 2012-08-08 21:55:53

+0

更糟糕的是,我不小心把上面的循環放到了另一個循環中(錯過了一個括號!),導致迭代次數的平方(numFiles^2而不是numFiles!)... – Luis 2012-08-09 00:15:19

回答

5

看起來你已經填充了列表,但錯過了將它們添加到數組中。

這將顯示您的問題:

for (int z = 0; z < chapterKeywords.length; z++) { 
    if (chapterKeywords[z] == null) { 
     System.out.println("No list found at array index " + z); 
     continue; 
    } 
    iterator = chapterKeywords[z].iterator(); 
    while (iterator.hasNext()) { 
     System.out.println(iterator.next()); 
    } 
} 
+0

非常感謝!你的代碼幫助我理解了這個問題是由chapterKey [z]而不是迭代器產生的。再次感謝您的幫助! – Luis 2012-08-08 21:57:34

1

chapterKeywords [Z]爲空。它肯定存在或者你會得到一個越界的錯誤,但是你實際上沒有調用過像chapterKeywords [z] = new String()..

+0

謝謝。的確,章節關鍵字[z]已經全部結束了! – Luis 2012-08-08 21:56:25