1

我不明白为什么使用以下代码抛出java.lang.NullPointerException (在这一行: iterator = chapterKeywords[z].iterator();):

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正确填充并且工作正常,但是,唉,事实并非如此!感谢大家的无量帮助!

4

2 回答 2

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());
   }
}
于 2012-08-08T20:20:48.247 回答
1

ChapterKeywords[z] 为空。它肯定存在,否则你会得到一个越界错误,但你实际上并没有调用过类似 chapterKeywords[z] = new String()..

于 2012-08-08T20:21:57.847 回答