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ループですでに使用した後で確認matrixentryし、 andを呼び出します。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();
于 2009-11-14T16:01:02.420 に答える
1

コードでもFindbugsを実行することをお勧めします。これは、多くの小さなことをキャッチする素晴らしい仕事をします。たとえば、すでにアクセスした後のmatrixentryのnullチェックなどです。

于 2009-11-14T16:09:42.747 に答える
0

rowAarrayとcolArrayは適切に初期化されていますか?
あなたのコメントによると、そうではありません。

あなたのコードは読みにくく、このような一貫性のないチェックがあります

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

オブジェクトのメソッドを呼び出してから、nullがないかチェックします。

あなたの人生をプログラミングと結びつけるつもりであり、それが単なる宿題ではない場合、私はあなたにあなたのコードの提示と表現力をあなたの訪問カードとして扱うことをお勧めします。

于 2009-11-14T15:43:07.340 に答える
0

配列要素を事前に初期化する必要があります。これは、基本的なSunJavaArraysチュートリアルでカバーされています。最終的にはArrays#fill()そのために使用できます。

于 2009-11-14T15:47:04.430 に答える