这行java代码有什么问题?

这行java代码有什么问题?,java,nullpointerexception,binary-tree,Java,Nullpointerexception,Binary Tree,对于这行代码,我试图检查当前节点的leftChild和当前节点的rightChild是否都=='+'或字符加号。如果其中一个不=字符+我想执行其他代码。这一行和我用来调用这一行代码的方法出现空指针异常。 iData只是节点内的信息。如果current,current.leftChild或current.rightChild为null,您将得到NullPointerException。 您需要首先执行空检查。如果您得到空指针异常,这意味着以下情况之一 1.当前值为空 2.leftChild为空/r

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

如果
current
current.leftChild
current.rightChild
null
,您将得到
NullPointerException

您需要首先执行空检查。

如果您得到空指针异常,这意味着以下情况之一
1.当前值为空
2.leftChild为空/rightChild为空
3.iData为空


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

当前的
leftChild
当前的.rightChild
(或
当前的
本身)未正确设置,并且
为空。尝试访问
null
的成员会导致
NullPointerException

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

System.out.println(“leftChild:+current.leftChild.iData”)

System.out.println(“leftChild:+current.righchild.iData”)


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

首先尝试打印每一个对象以找出什么是空的,当您找到引起您麻烦的部分时,您应该得到一个NPE,这将左右分开为不同的故障。请注意,如果您创建这些单独的行,并且这两个行都失败,那么您只会得到第一个行的失败

现在:

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

您编写的代码不会(一旦它没有抛出异常)测试您希望它测试的内容。你说你想看看其中一个是不是!=到“+”,但此代码仅测试两者是否为!=“+”,因此,你错过了一些我认为你注定要抓住的条件。事实上,如果您真的想要执行其他代码,如果其中一个不等于“+”,那么您想要的是

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

current
current.leftChild
current.righchild
为空。如果
iData
字符
而不是
字符
,则它也可以为空。一个接一个地打印出来,看看是哪个。如果iData为空,你还会得到NPE吗?是的。在与基元类型进行比较时,需要取消对象类型的装箱。为此,您可以在对象实例上调用JVM方法。如果未设置实例,则会引发NPE。@NiklasB我刚刚测试过这个,实际上,如果基元类型为null,它将不会编译。但是,如果对象类型为null,它仍然与null和+。在用户情况下,如果iData为空,它将输入thsi if语句。@Vash:好的,凯文说的是我最初认为会发生的事情。没有NPE,而是
=
将返回
true
@Kevin,您使用的语句不正确。根据定义,基元类型不能为null。
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 '+'
}