これはJavaコードのスニペットです:
int[][] uu = new int[1][1];
uu[0][0] = 5;
for(int[] u: uu){
System.out.println(u[0]);
}
5を出力します。しかし、forループの宣言部分がas int[] u
ではなくas int[][] u
として宣言されているのはなぜですか?
Uuでは2D配列を参照しています...それは宿題ではありません。 Java認定の準備をしています。乾杯
あなたのuu
はarray of array
。したがって、それを反復する場合、最初にarray
を取得し、次にその配列を反復して個々の要素を取得できます。
したがって、外側のループにはint[]
型として、したがってその宣言。もう1つの内部ループでu
を反復処理すると、タイプint
が得られます:-
for (int[] u: uu) {
for (int elem: u) {
// Your individual element
}
}
これは、uu
がint[]
配列の配列であるためです。したがって、その中のすべてのアイテムはint[]
です。 for
ループでは、反復する配列内の項目のタイプを宣言します。
ループは、タイプint[]
のオブジェクトであるuu
の要素で反復しています。 (または言い換えると、u
はuu
の要素であり、したがってint[]
です)。
宣言は常に、反復によって取得されたオブジェクトのタイプ(この場合はint[]
)です。
int[]
の繰り返しと同じです:
for (int x : myArray) { ...}
x
の各要素はint
型だからです。
"forループの宣言部分がint [] uとして宣言されているが、int [] [] uとして宣言されていない理由"
配列は2次元なので、2層の反復を処理します。 _List<List<Integer>>
_が機能するのと同じ原則で、別の「内部」に配列があります。
すべての要素を反復処理するには、rows-elements構造を検討する必要があります。コンテナから各行を取得し、次に各行から各要素を取得する必要があります。
for(int[] u: uu)
は、for-each反復行であり、for(int row = 0; row < container.length; row++)
と同じ原理であり、u
またはそれぞれ_container[row]
_はそれ自体が要素ではなく、行です要素の(配列)。要素を取得するには、2番目の反復層が必要であることを意味します。
_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]);
}
}
_