java.lang.NullPointerException遇到了

java.lang.NullPointerException encountered

我在Java看到了很多关于上述错误的答案,但是大多数都在说错误是什么,我找不到更正它的方法。

这是我在 Java 中的代码片段:

public static void optimalAlignmentScoreBU(String r, String s, int matchScore, int transition, int transversion, int indel) {

        int m = r.length();
        int n = s.length();
        Node[][] strg = new Node[m + 1][n + 1];

        // base cases
        strg[m][n].val = 0;
}

我在写 strg[m][n].val =0 的那一行出错了; 我创建了一个节点 class 如下:

// ELEMENT OF DP MATRIX IS OF TYPE NODE
    public class Node {
        int val;
        ArrayList<Pair<Integer>> arrows = new ArrayList<Pair<Integer>>();
    }

// PAIR CLASS
public static class Pair<T> {
        T p1;
        T p2;

        public Pair(T p1, T p2) {
            this.p1 = p1;
            this.p2 = p2;
        }
    }

你能告诉我哪里出了问题吗?为什么指向 NULL?我该怎么做才能纠正这个问题?

strg为空;它的所有值都是 null。您需要创建一个 new Node.

当您在 java 中创建 non-primitives 的数组时,它还不包含任何实际对象——每个项目都是 null

NPE是当你在一个null对象上调用一个methode时...使用调试器看看他在哪里是null

您创建了一个空节点矩阵。

    strg[m][n] = new Node();
    strg[m][n].val = 0; // Now there is a Node, no longer NPE.

当然更好的是:

    Node node = new Node();
    node.val = 0;
    strg[m][n] = node;

其中一个新节点实际上其 val 字段已经为 0。

当然必须创建所有矩阵节点。

在java中:

int[] v = new int[10]; // All 0.
boolean[] v = new boolean[10]; // All false.
String[] v = new String[10]; // All null.
double[] v = new double[10];  // All 0.0.