我对java中的指针有问题。如何修复java.lang.NullPointerException?
这是一种从java中的稀疏矩阵中获取元素的方法。我一直收到一个我对java中的指针有问题。如何修复java.lang.NullPointerException?,java,pointers,matrix,sparse-matrix,Java,Pointers,Matrix,Sparse Matrix,这是一种从java中的稀疏矩阵中获取元素的方法。我一直收到一个java.lang.NullPointerException错误。我已经检查了代码,找不到错误 public int getElement(int row,int col){ int result = 0; MatrixEntry matrixentry = null; if ((row >= 0) && (row < getNumRows()) &&
java.lang.NullPointerException
错误。我已经检查了代码,找不到错误
public int getElement(int row,int col){
int result = 0;
MatrixEntry matrixentry = null;
if ((row >= 0) && (row < getNumRows()) &&
(col >= 0) && (col < getNumCols())) {
if (col == colArray[col].getColumn() && row ==rowArray[row].getRow()){
matrixentry = rowArray[row];
while (matrixentry.getColumn() < col) {
matrixentry = matrixentry.getNextColumn();
} // end while
if (matrixentry.getColumn() > col){
return 0;
}
if (matrixentry == null){
return 0;
}//
result = matrixentry.getData();
}//
}//
return result;
} // end
public int getElement(int行,int列){
int结果=0;
MatrixEntry MatrixEntry=null;
如果((行>=0)和&(行=0)和(colcol){
返回0;
}
如果(matrixentry==null){
返回0;
}//
结果=matrixentry.getData();
}//
}//
返回结果;
}//结束
您的rowAarray和colArray是否正确初始化?根据你的评论,他们不是 您的代码很难阅读,并且存在类似这样的不一致检查
if (matrixentry.getColumn() > col) {
return 0;
}
if (matrixentry == null){
return 0;
}
对对象调用方法,然后才检查它是否为null
若你们想把你们的生活和编程联系在一起,而这不仅仅是一个家庭作业,我建议你们把代码展示和表达能力当作你们的访问卡 您需要预先初始化数组元素。这是基础课程的内容。您最终可以使用它。在while循环中使用了
matrixentry
之后,检查null
,并调用.getColumn()
和.getNextColumn()
我想如果您先检查一下,您的代码会更好:
matrixentry = rowArray[row];
while (null != maxtrixentry && matrixentry.getColumn() < col) {
matrixentry = matrixentry.getNextColumn();
}
if (null == maxtrixentry || matrixentry.getColumn() > col){
return 0;
}
result = matrixentry.getData();
matrixentry=rowArray[row];
while(null!=maxtrixentry&&matrixentry.getColumn() col){
返回0;
}
结果=matrixentry.getData();
我建议您也在代码上运行。它做了一个惊人的工作,捕捉到了很多小东西,例如在你已经访问了matrixentry之后对它进行的空检查。你也可以发布堆栈跟踪吗?天哪,删除那些“//end”和“/”注释。正如Adam提到的,堆栈跟踪以及代码在实际文件中的行号将非常有用。一旦知道代码的哪一行抛出异常,只需找出该行上的哪一个变量设置为null即可。@duffymo啊,来吧,任何能帮助他理解自己代码的东西都可以,不是吗?private MatrixEntry[]rowArray=new MatrixEntry[0];私有MatrixEntry[]colArray=新MatrixEntry[0];这是我初始化的rowArray和colArrayBut,它们是零长度数组。您计划如何将元素添加到这些元素中?在某些情况下,您必须检查对象是否为null。但不是那个。您是创建rowArray的人。它如何包含空对象?原始代码希望在循环之后看到空对象:if(matrixentry==null){return 0;}
,因此它也应该在循环内部检查。顺便说一句,谁知道从.getNextColumn()
返回什么?这不是数组本身的一部分。