使用二叉树节点的while循环中的NullPointerException

时间:2014-08-09 02:30:45

标签: java eclipse nullpointerexception while-loop binary-tree

我在这里使用二叉树结构。我从包含while语句的行获得“NullPointerException”。我完全不知道为什么会这样。

   BinaryTreeNode<CharData> currNode = theTree.findValue(data);

    // Move up the Binary Tree to create code. 
    while(currNode.getParent() != null) {
        // The loop does some stuff that doesn't
        // affect what is assigned to currNode.

        // Move to the parent node for the next iteration.
        currNode = currNode.getParent();

    } // End the while loop.

    return code; // Return the string of binary code.

查找值是我的BinaryTree类中的一种方法,用于搜索并查找包含特定数据的节点。我知道这可以通过在此实现之外单独测试来实现。

2 个答案:

答案 0 :(得分:1)

NPEcurrNode时,while循环语句可以抛出null的唯一原因。我怀疑findValue()已返回null

我猜一个修复(当你关心最顶层的节点时)将是:

while(currentNode != null) {
    rootNode = currentNode;
    currentNode = currentNode.getParent();
}

或依赖于布尔快捷方式评估的典型模式:

while(curentNode != null && currentNode.getParent() != null) 

或者我使用警卫的首选解决方案:

if (currentNode == null)
   throw NotFound(); // or return something

while(curentNode.getParent() != null) {

答案 1 :(得分:1)

如果看到代码:

BinaryTreeNode<CharData> currNode = theTree.findValue(data);

我想,如果currNode能够搜索数据,findValue()正在获得一些值,否则它会返回NULL值。

当它返回NULL值时,它将抛出NPE。 为避免这种情况,您可以稍微修改一下代码。

while(currNode != null  && currNode.getParent != null) {
   // your code here
}