遇到java.lang.NullPointerException
我在Java中看到了许多关于上述错误的答案,但是大多数答案都在说明错误是什么,我找不到纠正错误的方法 这是我的Java代码片段:遇到java.lang.NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我在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();
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;
我创建了一个节点类,如下所示:
// 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;
}
}
//DP矩阵的元素的类型为NODE
公共类节点{
int-val;
ArrayList箭头=新的ArrayList();
}
//结对班
公共静态类对{
tp1;
tp2;
公共对(tp1,tp2){
这是1.p1=p1;
这是p2=p2;
}
}
你能告诉我出了什么问题吗?为什么要指出空值?如何更正此问题?
strg
为空;其所有值均为null
。您需要创建一个新节点
当您在java中创建一个非原语数组时,它还没有包含任何实际的对象——当您在一个空对象上调用methode时,每个项都是
null
NPE。。。使用debbuger并查看他在哪里为null您创建了一个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.
strg[m][n]
为空strg[m][n]
为空,因此您无法访问其.val
字段。数组是用空值初始化的,您需要创建一个节点放在该索引处,该节点就是您可以调用的.val
打开的节点。这是否回答了您的问题?你好谢谢那么我应该如何创建矩阵,比如什么类型的矩阵?现在我已经创建了like->Node[]strg=new Node[m+1][n+1];这应该改变吗?这很好,但是对于(inti=0;istrg[i][j]
为空。所以这是一个初始化矩阵中所有单元格的好方法?如果您使用all。根据具体情况,有时会分配新的节点对象,而旧值与此无关。您的消息不适合回答,而更适合注释。