java - 这个NullPointerException从哪里来?

标签 java nullpointerexception dijkstra

for(Node<T> neighbor : current.getAdjacentNodes()) {
    neighbor.setDistance(current.getDistance() + neighbor.getDistance());

    queue.add(neighbor);
}

我从这个 for 循环中得到一个 NullPointerException。我真的不知道如何避免这种情况。 我已经尝试询问 (if neighbor == 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
[类(class)代码] http://pastebin.com/hKMrG6h2

最佳答案

距离字段为 Integer 类型。但该字段的 getter 返回原始 int。当你调用 getter 并且该字段未初始化或具有 null 值时,它将抛出 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;
    }
}

关于java - 这个NullPointerException从哪里来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466381/

相关文章:

java - 两个数组元素的总和?

java - 在java中打乱数组列表

java - 我在向数据库插入记录时遇到 java 堆空间错误?

java - 动态 JDE 连接器增加句柄数的问题会导致 OutOfMemory,解决后会出现 NullPointerException

android - PopupWindow 在调度事件时崩溃

java - Java map 上的 NullPointerException。怎么了?

c++ - 如何使用 OpenMP/MPI 实现并行化的 Dijkstra 算法

java - LDAP Java 属性 maxpwdAge 返回 -864000000000

c++ - 最多使用 k 个顶点的有向加权图中的最短路径

algorithm - 查找节点之间所有简单路径的问题?