「こんにちは、私のとても賢い生徒よ!」
「こんにちは、リシ!」
「配列についての新しい議論を待ち望んでいますか? さて、今日は皆さんのために議論したいと思います! 今日はギザギザ配列と多次元配列についてお話します。」
「血に飢えていて恐ろしいようですね。」
「心配しないでください。本物のプログラマーは、たとえ歯をむき出しにしても、常に配列を扱うことができます。冗談はさておき、配列のギザギザは、2 次元配列の行を交換するだけでなく、配列を構築する能力も反映しています。」ただし、そうである必要があります。
「2 次元配列の最初の行の長さを 10 にし、2 番目の行の長さを 50 にしたいとします。」
「本当にそんなことができるの?」
「もちろんです! まず、「コンテナのコンテナ」を作成します。これが最初の配列であり、行の配列への参照を保存します。これがどのように行われるかです。
int[][] name = new int[height][];
「2 番目の次元を省略するだけで、Java マシンはコンテナーのコンテナーを作成します。これは、このコードの実行後にメモリ内に格納される内容です。

「そして、あなたはすでに 1 次元配列の作成方法を知っています 🙂
結果のコードは次のようになります。
|
2次元配列0行目は要素 の配列 1行目は要素の配列 10 50 |
「いわゆる「ギザギザ」の配列を作成しました。その端は粗くて不規則です。
「そして、この配列のすべての要素を画面上に表示したい場合は、配列のlength
配列が便利です。結局のところ、配列の行の長さは異なります。
「ところで、この例の『コンテナのコンテナ』の長さを調べる方法を教えてください。これは配列オブジェクトでもあります。つまり、長さがあるということです。」
「もしかしてmatrix.length
?」
「その通りです。行を形成する配列については、matrix[0].length
0 番目の行に使用します。」
「そして最初に、それはmatrix[1].length
?を使用することを意味します。」
「その通りです。最初の場合、コマンドを実行すると 10 が生成され、2 番目の場合、結果は 50 になります。
2 次元配列の操作
「では、二次元配列を表示してみましょう:
|
配列を作成します。配列 に値を入力します。 配列の行を反復する外側のループ。 単一行のセルを反復する内部ループ。 |
「ご覧のとおり、入れ子になったループが 2 つ必要です。最初のループを external と呼び、2 番目のループをinnerと呼びます。
"外側のループ (i
変数) では、2 次元配列を構成するすべての行 (配列) を順番に調べます。 の各値は、i
そのインデックスを持つ行に対応します。
"内側のループ (変数j
) では、行内のすべてのセルを反復処理します。内側のループのおかげで、1 つの 1 次元配列の値で構成される行が画面に表示されます。
「次のように表示されます。
配列の 1 行が処理されます | 1 2 3 4 5 6 |
配列の 2 行が処理されます | 1 2 3 4 5 6 |
配列の 3 行が処理されます | 1 2 3 4 5 6 |
多次元配列
「アミーゴ! 2 次元の配列があるなら、3 次元の配列も存在できると思いましたか?
「ちょうどそれを考えていたんですが、恥ずかしくて聞けませんでした。
「はい、3 次元配列、そして一般的には任意の次元の配列を作成できます。そのような配列は「多次元」と呼ばれます。ちょっとした楽しみのために、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 次元配列内のすべての値を表示するコードを作成します。これを行うには十分な知識があります。重要なことは、忍耐強く注意を払うことです。あるいは、機知に富むことかもしれません (秘密の部分があります)このタスクを 1 行で解決するのに役立つ知識が含まれています)。ただし、どのように解決するかは関係なく、必ず解決してください。」
「ありがとう、リシ。やってみます。」
GO TO FULL VERSION