我在java中遇到指针问题。如何修复java.lang.NullPointerException?

时间:2009-11-14 15:39:21

标签: 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()) &&
        (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 

4 个答案:

答案 0 :(得分:1)

您在{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();

我猜你的代码会在你先检查后做得更好:

{{1}}

答案 1 :(得分:1)

我建议您也在代码上运行Findbugs。捕获大量小东西确实很棒,例如在你访问了matrixentry之后对其进行空检查。

答案 2 :(得分:0)

你的rowAarray和colArray是否正确初始化了?
根据你的评论他们不是。

您的代码难以阅读且存在不一致的检查

if (matrixentry.getColumn() > col) { 
    return 0;
}
if (matrixentry == null){ 
    return 0;
} 

您在对象上调用方法,然后将其检查为null。

如果您打算将您的生活与节目联系在一起,并且它不仅仅是一个HomeWork,我建议您将代码演示和表现力视为您的访问卡。

答案 3 :(得分:0)

您需要预初始化数组元素。基本Sun Java Arrays tutorial涵盖了这一点。你最终可以使用Arrays#fill()