【问题标题】:Where does this NullPointerException come from?这个 NullPointerException 来自哪里?
【发布时间】:2014-06-28 11:34:40
【问题描述】:
for(Node<T> neighbor : current.getAdjacentNodes()) {
    neighbor.setDistance(current.getDistance() + neighbor.getDistance());

    queue.add(neighbor);
}

我从这个 for 循环中得到了 NullPointerException。我真的不知道如何避免这种情况。 我已经尝试过询问(如果邻居 == null){ break },但这也不起作用。

这是我的课。 http://pastebin.com/hKMrG6h2

java.lang.NullPointerException
at src.Node.getDistance(Node.java:69)
at src.Dijkstra.populateDijkstraFrom(Dijkstra.java:35)
at DijkstraTest.TestCase1(DijkstraTest.java:34)

Dijkstra.java:35 是我的 for 循环

[原始代码]http://pastebin.com/k7Mu18YE
[类别代码]http://pastebin.com/hKMrG6h2

【问题讨论】:

  • current 可能为空吗?发布您的异常以及它发生在哪一行。
  • 我已经尝试了一些检查,我认为我的问题是 neighbor.getDistance() 但我不知道如何检查邻居是否是“最后一个”
  • 你不能发布堆栈跟踪吗?
  • 你还没有贴出相关代码。您的堆栈跟踪清楚地显示了 NullPointerException 发生在 inside 方法 Node.getDistance.
  • 这不是引发该异常的代码。 Dijkstra.java 第 35 行不包含调用。 Node.java 第 69 行不能包含空值。

标签: java nullpointerexception dijkstra


【解决方案1】:

距离字段为整数类型。但是该字段的 getter 返回原始 int。当您调用 getter 并且该字段未初始化或具有空值时,它将抛出 NPE。那是因为 JRE 尝试将 Unbox 整数类型转换为原始 int。而且您不能将 null 分配给 int。

我附上了重现该行为的简短代码。

    public class Testy {

    static Integer v;

    public static void main(String[] args) {
        getDistance();
    }

    private static int getDistance()
    {
        return v;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2021-11-14
    • 2013-03-13
    • 1970-01-01
    • 2016-01-01
    • 2018-05-26
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多