入門 ブラウザ 約15分

配列で複数の値をまとめて持つ

配列の宣言、添字、for 文での読み取りを通して、複数の値をまとめて扱う形を学ぶレッスン。

テストの点数を5人分あつかいたいとき、変数を5つ並べるとどうなるでしょうか。配列を使うと、同じ型の値をひとまとめにして番号で管理できます。

実行環境は引き続きブラウザ上のもの(paiza.IOOneCompiler)です。

変数を並べる限界

5人分の点数を変数で持つと、こうなります。

public class Main {
  public static void main(String[] args) {
    int score0 = 80;
    int score1 = 70;
    int score2 = 90;
    int score3 = 60;
    int score4 = 85;
    System.out.println(score0);
    System.out.println(score1);
    System.out.println(score2);
    System.out.println(score3);
    System.out.println(score4);
  }
}

5人なら何とかなりますが、30人になると変数も println も30行ずつ必要です。

配列で書き直す

配列を使うと、5人分の点数を1行で書けます。

public class Main {
  public static void main(String[] args) {
    int[] scores = {80, 70, 90, 60, 85};
    System.out.println(scores[0]);
    System.out.println(scores[2]);
  }
}
80
90

int[] は「int 型の配列」を意味します。{80, 70, 90, 60, 85} の5つの値がまとめて scores に入ります。

インデックスは 0 から始まる

配列の各値には、0 から始まる番号(インデックス)がつきます。

インデックスscores[0]scores[1]scores[2]scores[3]scores[4]
8070906085

先頭が [0] で、最後が [4](要素数 5 − 1)です。scores[5] と書くとエラーになります。

要素を書き換える

配列の要素は、ふつうの変数と同じように代入で上書きできます。

public class Main {
  public static void main(String[] args) {
    int[] scores = {80, 70, 90, 60, 85};
    System.out.println("変更前: " + scores[1]);

    scores[1] = 95;
    System.out.println("変更後: " + scores[1]);
  }
}
変更前: 70
変更後: 95

scores[1] = 95; で、2番目の要素が 70 から 95 に変わりました。

for 文で全要素を処理する

配列と for 文を組み合わせると、要素数がいくつでも同じコードで処理できます。

public class Main {
  public static void main(String[] args) {
    int[] scores = {80, 70, 90, 60, 85};

    int sum = 0;
    for (int i = 0; i < scores.length; i++) {
      sum = sum + scores[i];
    }
    System.out.println("合計: " + sum);
    System.out.println("平均: " + sum / scores.length);
  }
}
合計: 385
平均: 77

scores.length は要素数(ここでは 5)を返します。for 文の条件を i < scores.length にすれば、要素数が変わってもコードを直す必要がありません。

平均が 77.0 ではなく 77 になっているのは、int 同士の割り算で小数が切り捨てられるためです(計算の回で見た動きと同じです)。

配列をメソッドに渡す

前回学んだメソッドに配列を渡すこともできます。

public class Main {
  public static void main(String[] args) {
    int[] scores = {80, 70, 90, 60, 85};
    System.out.println("合計: " + total(scores));
  }

  static int total(int[] data) {
    int sum = 0;
    for (int i = 0; i < data.length; i++) {
      sum = sum + data[i];
    }
    return sum;
  }
}
合計: 385

int[] data で配列を受け取り、合計を計算して return しています。main は「合計を出す処理の中身」を知らなくてよくなりました。

次の回へ

配列は便利ですが、要素を途中に追加したり削除したりするのが苦手です。次回は、要素数を柔軟に変えられる ArrayList を見ます。