1

この使い古された質問に関する多くの質問を見てきましたが、null のチェック中に NPE を取得する理由についての答えが見つかりません。私自身と別のパートナーは、単純にローテーションを使用して自己均衡バイナリ検索を構築しているため、新しいルートに反対側に配置する必要がある子がある場合は、一時ノードを保存する必要があります。

ここで、nextRoots の左または右の子が null かどうかを確認し、そうでない場合は、将来の配置のために一時ノードに保存します。

            Node temp = null;
            nextRoot = root.rightChild; // Set the next root
            oldRoot = root; // Hold the old root

            // If next roots left child is NOT null
            // Lets store it and null it now

            if (nextRoot.leftChild != null) // This check throws NPE, not nextRoot, just the nextRoot.leftChild
            {
                temp = nextRoot.leftChild;
                nextRoot.leftChild = null;
            }

if チェックがこの問題を回避する方法であるという印象を受けていますが、それ自体が問題を引き起こしています。さらにコードが必要な場合はお知らせください。

4

3 に答える 3

3

nextRoot.leftChild が NPE をスローする場合... nextRoot は null です。コードの動作が正しいかどうかを確認してください。それが... if を次のように変更します。

if (nextRoot != null && nextRoot.leftChild != null)

于 2013-03-24T00:41:09.093 に答える
2

nextRootに加えて null でないかどうかを確認しますnextRoot.leftChild

if (nextRoot != null && nextRoot.leftChild != null)

このコードをデバッグできれば、ここに投稿するよりも簡単に原因を特定できます。

于 2013-03-24T00:42:41.747 に答える
1

nextRoot が null に設定されているため、NPE を取得している必要があります。nextRoot が設定されている行を確認してください。

于 2013-03-24T00:40:24.987 に答える