2012-01-31 4 views
0

Pourquoi ai-je un NPE sur la cession de:Pourquoi un NPE dans un tableau 2d?

mPyramid[row][column] = temp; 

Voici mon code:

Block temp; 
    Block[][] pyramid = new Block[mInput.length][]; 

    for (int i = 0; i < pyramid.length; i++) { 
     pyramid[i] = new Block[mInput[i].length]; 
     for (int j = 0; j < pyramid[i].length; j++) { 
      pyramid[i][j] = new Block(); 
     } 
    } 

    for (int row = 1; row < mInput.length; row++) { 
     for (int column = 0; column < mInput[row].length; column++) { 
      temp = new Block(mInput[row][column], null, null); 
      mPyramid[row][column] = temp; 

      setParents(row, column); 
      temp.setPathNode(calculateDistance(temp)); 

     } 
    } 
} 
+1

Je ne vois aucune déclaration de 'mPyramid'. – anubhava

Répondre

3

Il semble que vous créez la variable locale pyramid et référencement mPyramid.

+0

merci, juste besoin d'une deuxième paire d'yeux pour voir cela. Sera acceptée réponse. – Justin

0

Parce que mPyramid n'est pas initialisé ou le sous-tableau mPyramid[row] n'est pas initialisé.

Je suppose que vous êtes dans le deuxième cas. Pour initialiser mPyramid immédiatement avec une hauteur et une largeur, vous pouvez utiliser:

mPyramid = new Block[height][width]; // Swap height and width if you prefer