1

我已经查看了很多关于这个陈旧问题的问题,但我找不到答案来解释为什么我在检查 null 时会得到 NPE。我自己和另一个伙伴正在构建一个自平衡二分搜索,只需使用旋转,因此如果新根有一个需要放置在另一侧的子节点,我们需要存储一个临时节点。

在这里,我们检查 nextRoots 左或右孩子是否为空,如果不是,我们将其存储在临时节点中以供将来放置。

            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 为空。尝试检查代码行为是否正确。如果是...修改 if 如下:

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

于 2013-03-24T00:41:09.093 回答
2

检查是否nextRoot不为空除了nextRoot.leftChild

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

如果您可以调试此代码,则很容易确定原因而不是将其发布在此处。

于 2013-03-24T00:42:41.747 回答
1

您必须获得 NPE,因为 nextRoot 被设置为空。请检查设置 nextRoot 的行。

于 2013-03-24T00:40:24.987 回答