Java入門⑪ 配列 ── たくさんのデータを、まとめて持つ

前回まで、くり返し(for・while)をやってきました。

今回からは、たくさんのデータをまとめて扱う配列(はいれつ)です。くり返しと組み合わさると、大きな力になります。

配列とは、同じ種類のデータを、まとめて入れられる箱です。

なぜ、まとめる必要があるのか

第2回で「変数は、データを入れる箱」とやりました。3人のテストの点数なら、変数3つで書けます。でも、40人のクラスだったら? 変数を40個も用意するのは、現実的ではありません。

そこで使うのが、配列です。ひとつの名前で、たくさんのデータをまとめて持てます。料理でいうなら、仕切りのある弁当箱。ひとつの箱の中に、いくつもの仕切りがあって、それぞれにおかずが入っている、そんなイメージです。

書き方を見てみる

3人の点数を、配列にまとめます。

int[] scores = {80, 95, 70};

int[](int の後ろに角カッコ)は、「整数を、まとめて入れる箱」という意味です。scores に、80・95・70 の3つが入りました。

中身を取り出すときは、番号(インデックス)を使います。

System.out.println(scores[0]);   // 80
System.out.println(scores[1]);   // 95
System.out.println(scores[2]);   // 70

scores[0] は「scores の0番目」という意味です。

また「0から始まる」

第8回(for文)でも出てきた感覚が、再登場します。配列の番号は、0から始まります

scores[0] → 80   (1番目だけど、番号は0)
scores[1] → 95   (2番目だけど、番号は1)
scores[2] → 70   (3番目だけど、番号は2)

「1番目が0番」というのは、慣れるまで不思議です。でも、for文のときと同じ「0から数え始める」ルール。プログラミングではこれが基本です。

くり返しと組み合わせる ── ここが本領

配列が本当に強いのは、くり返し(for文)と組み合わせたときです。

int[] scores = {80, 95, 70};

for (int i = 0; i < scores.length; i++) {
    System.out.println(scores[i]);
}

実行すると、80・95・70 が順に表示されます。

  • scores[i] … カウンター i を番号に使い、0番、1番、2番…と順に取り出す
  • scores.length … 配列の中身の個数(ここでは3)

i が 0,1,2 と変わりながら、scores[0], scores[1], scores[2] を順に取り出している。for文のカウンターが、配列の番号とぴったり噛み合うんです。これが、第8回で「カウンターをうまく使うのがコツ」と書いた理由です。

(C#では .Length でしたが、Javaは .length(小文字スタート)です。細かいですが、間違えやすいので注意。)

つまずきポイント

学生が必ず一度はやるのが、存在しない番号を指定することです。

int[] scores = {80, 95, 70};   // 0番〜2番まで(3個)
System.out.println(scores[3]);  // 3番は無い!エラー

3個の配列なら、番号は 0・1・2 まで。3番は存在しません。なのに scores[3] と書くと、エラーになります(Javaでは「ArrayIndexOutOfBoundsException」という、長い名前のエラーが出ます)。

「0から始まるから、最後の番号は『個数マイナス1』」。3個なら、最後は2番。この感覚に慣れるまでは、よく出るエラーです。「番号、はみ出してないかな?」と疑ってみてください。

まとめ

配列は、同じ種類のデータをまとめて持つ箱。

int[] scores = {80, 95, 70};
System.out.println(scores[0]);   // 番号で取り出す(0から始まる)
  • 番号(インデックス)は 0から始まる
  • .length で個数が分かる(小文字スタート)
  • for文と組み合わせると、全部まとめて処理できる

次回は、配列によく似ているけれど、もっと柔軟な ArrayList を紹介します。