5

オブジェクトを優先キューに追加しようとすると、nullポインタ例外が発生し続けます

キューを初期化します:

private PriorityQueue<NodeObject> nodes;

そしてここで私はそれに追加しようとします:

NodeObject childNode = new NodeObject(child, 1);
nodes.add(childNode);

なぜこれが機能しないのですか?NodeObjectを追加する直前に作成するため、NodeObjectがnullではないことはわかっています。

4

3 に答える 3

8

キューを初期化していません。

nodes = new SomePriorityQueue();
于 2010-04-27T04:19:47.660 に答える
4

問題は、優先キューを初期化するのを忘れたことですnodes。次のように変更します。

privatePriorityQueue<NodeObject>ノード=newPriorityQueue <NodeObject>();

または、各コンストラクターにnodes(のように)明示的に割り当てます。nodes = new PriorityQueue<NodeObject>();Javaでは、プリミティブではない型は実際には暗黙のポインタであるため、ポインタnodesはに初期化されていますがnull、何かを指すように初期化されていないことに注意してください。

于 2010-04-27T04:19:51.100 に答える
2

実際には優先キューを作成していません。nodes == null。これによりNullPointerException、を呼び出そうとするとスローされますnodes.add

これを修正する方法は、実際にを作成しPriorityQueue<NodeObject>、それへの参照をに割り当てることnodesです。次のように、宣言でこれを行うことができます。

private PriorityQueue<NodeObject> nodes = new PriorityQueue<NodeObject>();
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

JLS4.12.5変数の初期値

  • 各クラス変数、インスタンス変数、または配列コンポーネントは、作成時に デフォルト値で初期化されます。
    • すべての参照タイプで、デフォルト値はですnull
于 2010-04-27T04:20:36.880 に答える