4

for基本的な 2D String 配列の入れ子になったループで、次のことに遭遇しました。

 array = new String [5][10];
for(int i=0; i<array.length;i++)
{
    for(int j=0; j<array[0].length;j++)
    {
        System.out.print(array[i][j]="*");
    }
    System.out.println("");
}

これが私が知りたいことです.なぜ2番目のforステートメントはその前のステートメントに好きではarray[0].lengthなく含まれているのですか?array.lengthfor

実験中にこれから抽出できるのは、両方のforステートメントが含まarray.lengthれ、2D 配列が 5x10 の場合、5x5 として出力されarray[0].lengthますが、正しい 5x10 が出力されるということだけでした。

では、なぜこの小さな調整ですべてが解決するのでしょうか?

4

4 に答える 4

5

あなたは2D配列を扱っています。array.length基本的に行数を提供しますが、列array[0].lengthを提供します(少なくともギザギザでない配列の場合)。次の例を見てください。

String[][] array = new String[][]{
    {"1","2"},
    {"3","4"},
    {"5","6"}
};

これarray.length3(2D 配列全体が3 つの1D 配列で構成されている) ですが、array[0].length(各構成配列2の長さ) です。最初の-loop は配列の配列全体をループしますが、2 番目のループは外側のループで検出された各構成配列をループします。したがって、内側のループは までループする必要があります (ただし、ループは含みません) 。forarray[0].length

于 2012-11-14T00:58:19.513 に答える
4

2D 配列は行列のようなもので、Stringオブジェクトの配列の配列で表されます。定義する場合:

array = new String [5][10];

あなたは、「長さ 10 の 5 つの文字列配列の配列が欲しい」と言っています。次のようなものです。

 [String[10]][String[10]][String[10]][String[10]][String[10]]

ここ:

for(int i=0; i<array.length;i++)
{
    for(int j=0; j<array[0].length;j++) //I'd recommend j < array[i] here. Nothing 
                                        //changes on this case, but it would bring 
                                        //some trouble if the second dimention of the 
                                        //array was not the same for every case.
    {
        System.out.print(array[i][j]="*");
    }
    System.out.println("");
}

最初の for は、5 つのString配列の配列を反復処理します。そのため、i は0to になり、配列の長さは 5 になります。2 番目の forは、最初の配列 ( length を持つもの) に含まれるオブジェクト4のインデックスを反復処理します。この配列の長さは要素です。String[]510

于 2012-11-14T01:04:52.387 に答える
0

array[0]は実際にはString[]配列だからです。

于 2012-11-14T00:56:48.513 に答える
0

2 番目のforステートメントは、配列内の列数 (この場合は 10) を取得するために必要です。

  • array.length- 番号。行の
  • array[0].length- 列数

この配列はギザギザではなく正方形であると想定さarray[0]れるため、この例では安全に使用できると見なされます。

間違った方法を見てみましょう: これを行うことによって:

for (int i=0; i<array.length;i++) {
    for(int j=0; j < array.length;j++) {
        System.out.print(array[i][j]="*");
    }
}

5 x 5 エントリしか表示されておらず、エントリ数の半分が欠落しています。また、配列が元々 10 行 x 5 列であっArrayIndexOutOfBoundsExceptionた場合、j = 5.

2D 配列を表示する便利な方法は次のとおりです。

System.out.println(Arrays.deepToString(array));
于 2012-11-14T00:57:14.307 に答える