我不明白为什么使用以下代码抛出 java.lang.NullPointerException (在此行: iterator = chapterKeywords [z] .iterator(); < / EM> ):
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 iterator = chapterKeywords [z ] .iterator();
非常感谢任何有关消除此异常的帮助或见解。
所以,这是我的问题:
为什么在将迭代器变量分配给新的迭代器时,在每次后续迭代时都会抛出NullPointerException?
如何消除此异常?
再次,TIA!
更新: 我认为已经正确填充了LinkedList的 并且工作正常,但是,唉,事实并非如此!谢谢大家的无可估量的帮助!
答案 0 :(得分: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());
}
}
答案 1 :(得分:1)
chapterKeywords [z]为空。它肯定存在或者你会得到一个越界错误,但你实际上并没有调用类似chapterKeywords [z] = new String()..