配列の基本
変数を 5 つ用意するのはつらい
クラスのテストの点数を扱うとします。習った書き方だけで組むと、こうなります。
Java
int score1 = 80;
int score2 = 65;
int score3 = 92;
int score4 = 71;
int score5 = 88;5 人ならまだ書けます。40 人なら 40 行です。全員分を合計しようとすれば score1 + score2 + ... と 40 個並べることになり、転校生が 1 人来るたびに変数を足して式も直すことになります。値の数だけ名前を用意する書き方は、ここで行き詰まります。
同じ型なら、1 つの名前にまとめて持てる
Java には、同じ型の値を並べて持つ 配列 があります。型名の後ろに [] を付けて宣言し、{} の中に初期値を並べます。
Java
int[] scores = {80, 65, 92, 71, 88};これで 5 つの値が scores という 1 つの名前にまとまりました。40 人でも、書くのは 1 行のままです。取り出すときは名前に番号を添えて scores[0] のように書きます。
入れる値がまだ決まっていないときは、個数だけ先に確保する書き方もあります。
Java
int[] scores = new int[5];こちらは中身が自動的に 0 で埋まります。String の配列なら null、boolean の配列なら false です。値がもう揃っているなら {}、あとから計算結果を入れていくなら new int[5] と使い分けます。
配列に入れられるのは 同じ型の値だけ です。int[] に文字列を混ぜることはできません。窮屈に見えますが、この制約のおかげで、取り出した値をどう扱えるかが常にはっきりします。
中身が 0 個の配列もある
配列は、要素が 1 つも入っていない状態でも作れます。
Java
int[] scores = {};
System.out.println(scores.length); // 0scores.length は、その配列に何個入っているかを教えてくれます。カッコを付けない点に注意してください。文字列の長さは s.length() とメソッド呼び出しですが、配列の length はカッコなしです。ここは Java を書き始めた人がほぼ全員一度は間違えます。
中身が 0 個ということは、取り出せる要素も 1 つもないということです。空の配列から先頭を取ろうとしても、そこには何もありません。配列を受け取るメソッドを書くときは、長さが 0 だったら何を返すか を先に決めておくのが定石です。
int[] scores = {};とint[] scores = null;は別物です。前者は配列はあるが空、後者は配列そのものが無い状態で、後者はscores.lengthを読んだ瞬間に落ちます。
やってみよう
今回は、渡された配列の先頭の要素を返すメソッドを書きます。ただし空の配列が渡されることもあり、そのときは 0 を返す決まりです。
先に長さを調べてから取り出すのか、取り出してから考えるのか。順番を意識して組み立ててください。空の配列から先に値を取ろうとすると、その場でプログラムが止まります。
要件
- クラス名は
Solution、メソッド名はfirstElement、引数はint[] arr1 つ、戻り値の型はintにすること - 配列が空 (
arr.length == 0) のときは0を返すこと - それ以外は
arr[0](先頭要素) を返すこと
入出力例
firstElement([10,20,30]) → 10
firstElement([5]) → 5
firstElement([]) → 0
firstElement([-3,7]) → -3