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.
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
}
}
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.
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
.
"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]);
}
}