2009-11-14 53 views
0

这是一种从Java中的Sparse Matrix获取元素的方法。我不断收到java.lang.NullPointerException错误。我查看了代码并找不到错误。我遇到了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 
+3

你也可以发布堆栈跟踪吗? – 2009-11-14 15:40:33

+2

好主,删除那些“//结束”和“//”的评论。它们比无用的更糟糕 - 不必要的混乱。 – duffymo 2009-11-14 15:52:35

+0

正如Adam提到的那样,堆栈跟踪对于此代码的行号在其所在的实际文件的上下文中会非常有帮助。一旦知道代码的哪一行正在抛出异常,只需要确定哪个变量在该行被设置为空。 – 2009-11-14 17:31:45

回答

1

您检查matrixentrynull之后,您已经在while循环中使用它并致电.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(); 
+0

有些情况下,您必须检查null对象。但不是那个。你是创建rowArray的人。它如何包含空对象? – 2009-11-14 16:07:49

+0

原始代码期望在循环后看到空对象:'if(matrixentry == null){return 0; }'所以它应该检查循环内部。顺便说一句,谁知道从'.getNextColumn()'返回什么?这不是阵列本身的一部分。 – rsp 2009-11-14 17:38:52

0

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

你的代码是难以阅读,也有这样的

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

您在对象上调用方法,然后才检查它的空不一致检查。

如果你打算把你的生活与编程联系起来,它不仅仅是一个家庭作业,我会建议你把你的代码表现力和表现力作为你的访问卡。

+0

private MatrixEntry [] rowArray = new MatrixEntry [0]; private MatrixEntry [] colArray = new MatrixEntry [0]; 这里是我初始化的rowArray和colArray – 2009-11-14 15:47:42

+0

但这些都是零长度数组。你打算如何为这些元素添加元素? – duffymo 2009-11-14 15:54:01

1

我建议你在你的代码运行Findbugs为好。它在捕获很多小东西方面做得非常出色,例如在你已经访问过之后对matrixentry的null检查。