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