【问题标题】:What is wrong with this line of java code?这行java代码有什么问题?
【发布时间】:2012-04-12 02:30:09
【问题描述】:
if (current.leftChild.iData != '+' && current.rightChild.iData != '+')  

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

【问题讨论】:

  • current、current.leftChild 或 current.rightChild 为空。如果iData 是Character 而不是char,它也可以为空。一张一张打印出来看看是什么。

标签: java nullpointerexception binary-tree


【解决方案1】:

如果你得到一个空指针异常,这意味着以下两种情况。
1. 当前为空。
2. leftChild 为空/rightChild 为空。
3. iData 为空

但是由于您没有提供很多详细信息。我帮不了你。

【讨论】:

  • 如果 iData 为空,你还会得到 NPE 吗?
  • 是的。当您与原始类型进行比较时,您需要对对象类型进行拆箱。为此,您需要在对象实例上调用 JVM 方法。如果未设置实例,则引发 NPE。
  • @NiklasB 我刚刚测试了这个,实际上如果原始类型为空,它将无法编译。但是如果对象类型为 null,它仍然会与 null 和 + 进行比较。在用户情况下,如果 iData 为 null,它将进入 thsi if 语句。
  • @Vash:好的,Kevin 说的是我最初认为会发生的事情。没有 NPE,而是 != 将返回 true。
  • @Kevin,您使用的语句不正确。根据定义,原始类型不能为空。
【解决方案2】:

current.leftChild 或 current.rightChild(或 current 本身)未正确设置,是 null。尝试访问null 的成员会导致NullPointerException。

【讨论】:

    【解决方案3】:

    如果current、current.leftChild 或current.rightChild 是null,您将获得NullPointerException。 您需要先执行空检查。

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

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

        现在:

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

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

        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 '+'
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多