0
if (current.leftChild.iData != '+' && current.rightChild.iData != '+')  

对于这行代码,我试图检查当前节点的 leftChild 和当前节点的 rightChild 是否都 == '+' 或字符加号。如果其中任何一个不 = 字符 + 我想执行其他代码。我得到了这一行的空指针异常以及我用来调用这行代码的方法。iData 只是节点内部的信息。

4

5 回答 5

7

如果您收到空指针异常,则表示以下两种情况。
1. 当前为空。
2. leftChild 为空/rightChild 为空。
3. iData 为空

但是因为你没有提供很多细节。我将无法帮助你。

于 2012-04-10T21:35:46.513 回答
2

要么current.leftChildor current.rightChild(或current本身)没有被正确设置并且是null. 尝试访问null结果中的成员NullPointerException

于 2012-04-10T21:35:55.947 回答
1

如果currentcurrent.leftChild或者current.rightChildnull,你会得到一个NullPointerException. 您需要先执行空检查。

于 2012-04-10T21:34:46.783 回答
0

使用断点查看 current.leftChild.iData 和 current.rightChild.iData 的值。或者你可以写:

System.out.println("leftChild:" + current.leftChild.iData);

System.out.println("leftChild:" + current.rightChild.iData);

您将需要检查对这些值的更改,因为在您的代码中某处已将它们设置为空。一旦它们为空,系统将给您 NullPointerException,因为这些对象不再存在。

于 2012-04-10T23:54:53.973 回答
0

首先尝试打印每一部分以找出什么是空的,当你到达给你带来麻烦的那部分时,你应该得到一个 NPE,这将左右分开成单独的故障。请注意,如果您制作这些单独的行并且两者都失败了,那么您只会得到第一行的失败。

现在:

if (current.leftChild.iData != '+' && current.rightChild.iData != '+') 对于>这行代码我试图检查当前节点的leftChild和>当前节点的rightChild两者 == '+' 或字符加号。如果>其中任何一个都不=字符+我想执行其他代码

你写的代码不会(一旦它不抛出异常)测试你说你想要的。你说你想看看是否有一个是 != 到 '+',但是这段代码只测试两者是否都是 != '+',因此你错过了一些我相信你想要捕捉的条件。事实上,如果你真的想执行其他代码,如果其中一个不等于'+',那么你想要的是

if (current.leftChild.iData == '+' && current.rightChild.iData == '+')
{
    //code you execute if both are equal to '+'
}
else
{
    //code you execute if either (or both) is not equal to '+'
}
于 2012-04-11T18:30:09.023 回答