我在这里使用二叉树结构。我从包含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类中的一种方法,用于搜索并查找包含特定数据的节点。我知道这可以通过在此实现之外单独测试来实现。
答案 0 :(得分:1)
当NPE
为currNode
时,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
}