我对java中的指针有问题。如何修复java.lang.NullPointerException?

我对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中的稀疏矩阵中获取元素的方法。我一直收到一个
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()
返回什么?这不是数组本身的一部分。