2012-08-08 192 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