if (current.leftChild.iData != '+' && current.rightChild.iData != '+')
对于这行代码,我试图检查当前节点的leftChild和当前节点的rightChild是否=='+'或字符加号。如果其中任何一个不=字符+我想执行其他代码。我得到这一行的空指针异常和我用来调用这行代码的方法。 iData只是节点内的信息。
答案 0 :(得分:7)
如果您收到空指针异常,则表示以下情况。
1.当前为空。
2. leftChild为null / rightChild为null。
3. iData为空
但是因为你没有提供很多细节。我无法帮助你。
答案 1 :(得分:2)
current.leftChild
或current.rightChild
(或current
本身)未正确设置且为null
。尝试访问null
的成员会产生NullPointerException
。
答案 2 :(得分:1)
如果current
,current.leftChild
或current.rightChild
为null
,您将获得NullPointerException
。
您需要先执行空检查。
答案 3 :(得分:0)
使用断点查看current.leftChild.iData和current.rightChild.iData的值。 或者你可以写:
System.out.println(“leftChild:”+ current.leftChild.iData);
System.out.println(“leftChild:”+ current.rightChild.iData);
您需要检查这些值的更改,因为代码中的某个位置已将它们设置为null。一旦它们为null,系统将为您提供NullPointerException,因为这些对象不再存在。
答案 4 :(得分: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 '+'
}