配列宣言のバリエーション
配列宣言のバリエーション
このレッスンでできるようになることは、配列の宣言と初期化について、合法な書き方と違法な書き方を見分けられることです。
角括弧はどちらに付けてもよい
次の 2 つはまったく同じ意味で、どちらもコンパイルが通ります。
int[] a = new int[3];
int b[] = new int[3];型のうしろに付ける int[] a が推奨の書き方ですが、変数名のうしろに付ける int a[] も C 言語ゆずりの書き方として認められています。試験は後者をわざと使ってきます。「違法だ」と判断させるのが狙いなので、落ち着いて合法だと答えてください。
1 行で 2 つ宣言すると意味が変わります。int[] c, d; は c も d も配列ですが、int e[], f; は e だけが配列で f はただの int です。角括弧の位置で片方だけが配列になるところが引っ掛けどころです。
宣言に長さを書いてはいけない
int[] g = new int[3]; // 合法
int h[3]; // コンパイルエラー配列変数の宣言は「参照を入れる箱」を作るだけで、長さは new のときに決まります。宣言の角括弧の中に数字を書くとコンパイルエラーです。
波括弧の初期化子は宣言と同時だけ
int[] i = {1, 2, 3}; // 合法。宣言と同時なら型を省ける
int[] j;
j = {1, 2, 3}; // コンパイルエラー
j = new int[]{1, 2, 3}; // 合法。あとから代入するなら new int[] が要る
int[] k = new int[3]{1,2,3};// コンパイルエラー。長さと初期化子は同時に書けない波括弧だけの初期化子が使えるのは宣言と同時のときだけです。宣言と代入を 2 行に分けたなら new int[]{...} の形にします。また new int[3]{1, 2, 3} のように長さと初期化子の両方を書くとコンパイルエラーになります。要素数は初期化子から決まるので、長さを書く必要がないからです。
この 3 つは Java Silver の頻出パターンです。「宣言と同時か」「長さと初期化子が同居していないか」の 2 点で判定できます。
要件
- a は
int[] aの形で宣言し、波括弧の初期化子で 1、2、3 を入れる - b は
int b[]の形で宣言し、波括弧の初期化子で 4、5、6 を入れる - c は宣言と代入を別の行に分け、7 と 8 を入れる
- 戻り値は
java.util.Arrays.toStringを通した文字列にする
入出力例
build(1) → "[1, 2, 3]"
build(2) → "[4, 5, 6]"
build(3) → "[7, 8]"ヒント
編集 LuaGate編集部