web-dev-qa-db-ja.com

2D配列を使用する各ループ

これは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認定の準備をしています。乾杯

10
uml

あなたのuuarray of array。したがって、それを反復する場合、最初にarrayを取得し、次にその配列を反復して個々の要素を取得できます。

したがって、外側のループにはint[]型として、したがってその宣言。もう1つの内部ループでuを反復処理すると、タイプintが得られます:-

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

これは、uuint[]配列の配列であるためです。したがって、その中のすべてのアイテムはint[]です。 forループでは、反復する配列内の項目のタイプを宣言します。

3
ShyJ

ループは、タイプint[]のオブジェクトであるuuの要素で反復しています。 (または言い換えると、uuuの要素であり、したがってint[]です)。

宣言は常に、反復によって取得されたオブジェクトのタイプ(この場合はint[])です。

int[]の繰り返しと同じです:

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

xの各要素はint型だからです。

2
amit

"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]);
  }
}
_
0
XenoRo