2014-05-23 4 views
0

Existe-t-il un moyen d'imprimer toutes les valeurs d'un tableau 3D?Afficher toutes les valeurs dans un tableau 3D

C'est ce que je suis arrivé, mais obtenir une exception de pointeur NULL:

 int i = 2; 
     int x = 15; 
     String[][][] arrays = new String[x][x][i]; 
     String arraytext = "hello"; 


      for (String[][] row: arrays) 
      Arrays.fill(row, arraytext); 


      for (int a = 0; a<=x; a++){ 
       for (int b = 0; b<=x; b++){ 
        for (int j = 0; j<=i; j++) 
         {System.out.println(arrays[a][b][j]);} 

            } 
           } 
+0

Vérifiez la trace de pile. Si vous ne savez pas comment, postez le stacktrace ici. –

+1

le '<=' vous tue. – rpax

+1

où est défini sous? –

Répondre

4

Vous avez un problème pour remplir votre tableau. vous obtenez

java.lang.ArrayStoreException: java.lang.String at Arrays.fill(row, arraytext); 

C'est parce que vous essayez d'ajouter une chaîne quand est attendu une chaîne [] []. Et pour l'impression, vous pouvez utiliser Arrays.deepToString() est votre réponse.

System.out.println(Arrays.deepToString(arrays)); 

Exemple:

public static void main(String[] args) { 
     String[][][] array3d = new String[10][10][10]; 

     for(String [] [] array2d : array3d){ 
      for(String[] array : array2d){ 
       Arrays.fill(array, "hello"); 
      } 
     } 

     System.out.println(Arrays.deepToString(array3d)); 

    } 
+0

Ce n'est pas 'NullPointerException'. Sinon, je l'aurais déjà fermé en tant que doublon. –

0

Vous allez en dehors des limites sur vos tableaux, au lieu de <= essayer <.

for (int a = 0; a < x; a++){ 
      for (int b = 0; b < x; sub++){ 
       for (int j = 0; j < i; j++) 
        {System.out.println(arrays[a][b][j]);} 

           } 
          } 

En outre, ce qui est sub? Votre extrait de code devrait indiquer où vous définissez cette variable.

+0

mis à jour sous b. merci – user3588388

+0

essayé avec user3588388

+1

Cela ne concerne pas l'exception levée avant cette boucle. – Michelle

0

On dirait que vous rencontrez hors de 1 erreur (utilisez < au lieu de <=):

for (int a = 0; a<x; a++){ 
    for (int b = 0; b<x; b++){ 
     for (int j = 0; j<i; j++) 
     {System.out.println(arrays[a][b][j]);} 

    } 
} 

Depuis que vous avez déclaré arrays comme

String[][][] arrays = new String[x][x][i]; 

les bornes sont de 0 à x-1 pour la première deux index et 0 à i-1 pour l'index thrid.

+0

Ce correctif ne résoudra pas 'NullPointerException'. –

0

En outre, vous incrémenter sous variable inconnue plutôt que b dans votre deuxième boucle

0

Vous avez juste oublié de remplacer une valeur temporaire de copie pastaing

for (int a = 0; a<=x; a++){ 
    for (int b = 0; b<=x; sub++){ // sub here <--- 
     for (int j = 0; j<=i; j++) { 
      System.out.println(arrays[a][b][j]); 
     } 
    } 
} 

Voir aussi @ réponse de l » de jh314 , vous faites le off par une erreur

1

Le problème est que ceci:

for (String[][] row: arrays) 
    Arrays.fill(row, arraytext); 

tente de passer row, qui est un tableau à double de chaînes, une fonction attend un seul tableau de chaînes. Pour obtenir le niveau bas de votre tableau 3D, vous voulez ceci:

for (String[][] slice: arrays) 
    for (String[] row: slice) 
     Arrays.fill(row, arraytext); 

Vous avez également les questions abordées par d'autres réponses dans votre double boucle: Vous obtiendrez un index hors des limites sauf si vous modifiez les <= s à <, et sub n'est pas défini.

+0

* N'initialise aucun des sous-tableaux * qui code initialise tous les tableaux, essaye juste de l'imprimer après avoir été déclaré et initialisé. –

+0

@LuiggiMendoza Je blâme la machine à café vide. Édité. – Michelle

Questions connexes