web-dev-qa-db-fra.com

Pour chaque boucle utilisant un tableau 2D

Voici l'extrait de code Java:

int[][] uu = new int[1][1];
uu[0][0] = 5;
for(int[] u: uu){
    System.out.println(u[0]);
}

Il en imprime 5. Mais pourquoi la déclaration dans la boucle for est-elle déclarée as int[] u, mais pas as int[][] u?

À l’uu, vous faites référence à un tableau 2D ........ Ce n’est pas un devoir. Je me prépare pour la certification Java.

10
uml

Puisque votre uu est un array of array. Ainsi, lorsque vous itérerez dessus, vous obtiendrez d'abord une array, et vous pourrez ensuite parcourir ce tableau pour obtenir des éléments individuels.

Donc, votre boucle externe a le type int[], et donc cette déclaration. Si vous parcourez votre u dans une boucle interne supplémentaire, vous obtiendrez le type int: -

for (int[] u: uu) {
    for (int elem: u) {
        // Your individual element
    }
}
21
Rohit Jain

C'est parce que uu est un tableau de tableaux int[]. Donc, chaque élément qu'il contient est int[]. Dans une boucle for, vous déclarez le type d'un élément d'un tableau que vous parcourez.

3
ShyJ

La boucle itère sur les éléments de uu, qui sont des objets de type int[]. (Ou en d'autres termes - u est un élément de uu, donc c'est un int[]).

La déclaration est toujours du type des objets récupérés par l'itération - dans ce cas, il s'agit de int[] -

Identique à l'itération sur un int[] est:

 for (int x : myArray) { ...}

parce que chaque élément de x est de type int.

2
amit

"Pourquoi la partie de déclaration de la boucle for est-elle déclarée comme int [] u, mais pas comme int [] [] u?"

Le tableau est bidimensionnel, vous avez donc affaire à une itération à deux couches. Vous avez un tableau "à l'intérieur" d'un autre, selon le même principe que List<List<Integer>> fonctionnerait.

Pour parcourir tous les éléments, vous devez envisager une structure lignes-éléments. Il est nécessaire que vous obteniez chaque ligne du conteneur, puis chaque élément de chaque ligne.

for(int[] u: uu) est simplement une rangée pour chaque itération, avec le même principe que for(int row = 0; row < container.length; row++), et u ou respectivement container[row] ne sont pas des éléments eux-mêmes, mais des lignes (tableaux) d'éléments. Cela signifie que vous avez besoin d'une deuxième couche d'itération pour obtenir les éléments:

int[][] container = new int[10][10];
//... - Fill elements.
for(int row = 0; row < container.length; row++){
  for(int element = 0; element < container[row].length; element++){
    System.out.printf("Row: %d Element: %d Value: %d\n", row, element, container[row][element]);
  }
}
0
XenoRo