多次元とジャグ配列

多次元とジャグ配列

このレッスンでできるようになることは、行ごとに長さが違う配列を作り、その長さと中身を正しく追えることです。

Java の二次元配列は配列の配列

Java に本当の意味の二次元配列はありません。int[][] は「int 配列を要素に持つ配列」です。だから行ごとに長さを変えられます。行の長さが不揃いな配列をジャグ配列と呼びます。ジャグとはギザギザという意味です。

int[][] t = new int[3][]; t[0] = new int[]{1}; t[1] = new int[]{1, 2}; t[2] = new int[]{1, 2, 3};

new int[3][] は、行の数だけを決めて中身は決めない書き方です。この時点で t.length は 3 ですが、t[0] はまだ null です。null のまま t[0].length を読むと NullPointerException になります。「コンパイルエラーになる」と答えさせる選択肢が定番ですが、コンパイルは通ります。実行時の例外です。

逆に new int[][3] は書けません。左の角括弧を空にしたまま右だけ数を書くことはできず、コンパイルエラーです。省略できるのは右側からです。

長さの取り方

行の数は t.length、ある行の長さは t[i].length です。ジャグ配列では行ごとに t[i].length が変わるので、内側のループの条件を t[0].length で固定して書くと、その行より長い行で ArrayIndexOutOfBoundsException になります。内側は必ず t[i].length にします。

波括弧でも不揃いに書ける

int[][] u = { {1}, {1, 2}, {1, 2, 3} };

宣言と同時なら波括弧の入れ子でも書けます。この形でも各行の長さは自由です。int[][] v = new int[2][3]; のように両方の数を書いた場合は長方形になり、全要素が既定値の 0 で埋まります。

角括弧の位置

int[][] aint[] a[]int a[][] の 3 つはすべて同じ意味で、すべて合法です。ここでも試験は読みにくい書き方をわざと選んできます。角括弧の合計が 2 つなら二次元、と数えれば判断できます。

要件

  1. t は new int[3][] で作り、各行をあとから代入する
  2. row が 0 以上なら その行を Arrays.toString で返す
  3. row が -1 なら t.lengtht[0].lengtht[2].length をカンマでつないで返す
  4. row が -2 なら new int[2][] の 0 行目を String.valueOf に渡した結果を返す

入出力例

jag(0)"[1]" jag(2)"[1, 2, 3]" jag(-1)"3,1,3" jag(-2)"null"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.java
学習モード

メモ

多次元とジャグ配列

⌘S で保存