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.
我在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.