Sto avendo un problema con i puntatori in Java. Come posso risolvere un java.lang.NullPointerException?

StackOverflow https://stackoverflow.com/questions/1734592

Domanda

Questo è un metodo che ottiene un elemento da uno Sparse Matrix in Java. Continuo a ricevere un errore di java.lang.NullPointerException. Ho guardato oltre il codice e non riesco a trovare l'errore.

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 
È stato utile?

Soluzione

Si controlla matrixentry per null dopo aver già utilizzato nel ciclo while e di chiamare .getColumn() e .getNextColumn().

Credo che il codice farebbe meglio se è stata selezionata prima:

    matrixentry = rowArray[row];

    while (null != maxtrixentry && matrixentry.getColumn() < col) {
         matrixentry = matrixentry.getNextColumn();
    }

    if (null == maxtrixentry || matrixentry.getColumn() > col){
        return 0;
    }
    result = matrixentry.getData();

Altri suggerimenti

Vi consiglio di eseguire Findbugs sul vostro codice pure. Si fa un lavoro incredibile cattura di un sacco di piccole cose, ad esempio il controllo di nulla su matrixentry dopo aver già effettuato l'accesso esso.

È necessario preinitialize gli elementi dell'array. Che è coperto dalla base Sun Java Array esercitazione . Si potrebbe eventualmente utilizzare Arrays#fill() per questo.

Sono la tua rowAarray e colArray inizializzati correttamente?
Secondo il tuo commento non lo sono.

Il tuo codice è difficile da leggere e non ci sono controlli inconsistenti come questo

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

Si chiama metodo sull'oggetto e solo allora esso controllare la nullo.

Se la vostra intenzione di legare la tua vita con la programmazione e non è solo una HomeWork mi sento di raccomandare a voi per curare la presentazione del codice e l'espressività come il vostro biglietto da visita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top