0

这是一种从 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

4 回答 4

1

在 while 循环中使用它并调用and之后检查它matrixentrynull.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();
于 2009-11-14T16:01:02.420 回答
1

我建议您也对您的代码运行Findbugs 。它在捕捉很多小东西方面做得非常出色,例如在您访问它之后对 matrixentry 进行空检查。

于 2009-11-14T16:09:42.747 回答
0

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

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

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

您在对象上调用方法,然后才检查它是否为空。

如果您打算将您的生活与编程绑定在一起,并且它不仅仅是一个家庭作业,我建议您将您的代码演示和表达能力视为您的名片。

于 2009-11-14T15:43:07.340 回答
0

您需要预初始化数组元素。基本的Sun Java Arrays 教程涵盖了这些内容。你最终可以使用Arrays#fill()它。

于 2009-11-14T15:47:04.430 回答