这行java代码有什么问题?

时间:2012-04-10 21:32:19

标签: java nullpointerexception binary-tree

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

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

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

current.leftChildcurrent.rightChild(或current本身)未正确设置且为null。尝试访问null的成员会产生NullPointerException

答案 2 :(得分:1)

如果currentcurrent.leftChildcurrent.rightChildnull,您将获得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 '+'
}