14

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

4

4 に答える 4

33

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

したがって、外側のループにはint[]as タイプがあるため、その宣言があります。u内側のループをもう 1 つ繰り返すと、次のタイプが得られますint: -

for (int[] u: uu) {
    for (int elem: u) {
        // Your individual element
    }
}
于 2012-11-14T17:11:53.010 に答える
4

uu配列の配列だからですint[]。したがって、その中のすべてのアイテムはint[]. ループでは、for繰り返し処理する配列内の項目の型を宣言します。

于 2012-11-14T17:11:48.273 に答える
2

ループはuu、タイプ のオブジェクトであるの要素を反復していますint[]。(つまり、 -uは の要素でuuあるため、 ですint[])。

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

を反復するのと同じint[]です:

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

の各要素xは 型であるためintです。

于 2012-11-14T17:11:38.270 に答える
0

「for ループの宣言部分が int[] u として宣言されているのに、int[][] u として宣言されていないのはなぜですか?」

配列は 2 次元であるため、2 層の反復を扱っています。機能するのと同じ原則で、別の「内部」に配列がありList<List<Integer>>ます。

すべての要素を反復するには、行要素構造を検討する必要があります。コンテナーから各行を取得し、次に各行から各要素を取得する必要があります。

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]);
  }
}
于 2012-11-14T17:42:11.390 に答える