1. ギザギザの配列

Java プログラマーは、2 次元配列の行を交換できるだけでなく、必要に応じて配列を構築することもできます。

2 次元配列の最初の行の長さを10、2 番目の行の長さを とするとします50。それはできますか?はい、できます。

まず、「コンテナのコンテナ」を作成する必要があります。これは行の配列への参照を保存する最初の配列です。やり方は次のとおりです。

int[][] name = new int[height][];

2 番目の次元を省略するだけで、Java マシンはコンテナーのコンテナーを作成します。このコードを実行した後のメモリ内の内容は次のとおりです。

Java のギザギザ配列

そして、まあ、あなたはすでに 1 次元配列の作成方法を知っています :

結果のコードは次のようになります。

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
2次元配列0行目は要素

の配列 1行目は要素 の配列10
50

いわゆる「ギザギザ配列」を作成しました。

そして、この配列のすべての要素を画面上に表示したい場合は、配列のlengthプロパティが役に立ちます。結局のところ、配列の行の長さは異なります。

ところで、この例の「コンテナのコンテナ」の長さはどのようにして求められるのでしょうか? これは配列オブジェクトでもあり、長さがあることを意味します。正解は ですmatrix.length

行を構成する配列についてはどうでしょうか?matrix[0].length



2. 2 次元配列の操作

2 次元配列を表示するとします。どうやってそれを行うのですか?

コードは次のようになります。

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2, 3, 4, 5, 6};
matrix[1] = new int[]{1, 2, 3};
matrix[2] = new int[]{1};
for (int i = 0; i < matrix.length; i++) {
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
配列を作成する
配列に値を入力します。


配列の行を反復する外側のループ。
単一行のセルを反復する内部ループ。

ネストされたループが 2 つ必要です。1 つ目はexternalと呼ばれ、2 つ目はinnerと呼ばれます。

外側のループ (i変数) では、2 次元配列を構成するすべての行 (配列) を順番に調べます。の各値は、iそのインデックスを持つ行に対応します。

内側のループ (j変数) では、行内のすべてのセルを反復処理します。内部ループのおかげで、1 つの 1 次元配列の値で構成される行が画面に表示されます。

これが表示されます:

配列の 1 行が処理されます
1 2 3 4 5 6
配列の 2 行が処理されます
1 2 3 4 5 6
1 2 3
配列の 3 行が処理されます
1 2 3 4 5 6
1 2 3
1


3. 多次元配列

配列に関するもう 1 つの興味深い事実は、おそらくすでに推測されているはずです。二次元配列が作れるなら三次元配列も作れるのでしょうか?

はい、任意の次元の配列を作成できます。このような配列は「多次元」と呼ばれます。

楽しみのために、4 次元の多次元配列を作成してみましょう。

int[][][][] matrix = new int[2][3][4][5];

このコードは単純すぎますね。

手動で作成したらどうなるでしょうか?

int[][][][] matrix;
matrix = new int[2][][][];                // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

それは単に配列を作成するだけです。それから、何らかの方法でそれを扱う必要もあります。

ボーナス タスク: 3 次元配列内のすべての値を表示するコードを作成します。