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]はnullです。それは間違いなく存在するか、範囲外のエラーが発生しますが、実際には、chapterKeywords [z] = new String()のようなものを呼び出すことはありませんでした。

于 2012-08-08T20:21:57.847 に答える