配列

目次
  • 解説
  • 1. 学習の準備
  • 2. 配列とは
  • 3. 配列の宣言と代入
  • 4. 配列の要素と添字
問題に挑戦!
進捗を変更する




解説

1. 学習の準備


下表のとおり学習用のクラスを作成して、その中にmainメソッドを作っておきましょう。

ファイル名ArrayAndLoop.java
パッケージ名(格納フォルダー)net.digskill
クラス名ArrayAndLoop

2. 配列とは


配列とは複数の同じ型の変数をまとめて扱えるようにする仕組みです。

例えば3つのケーキを売っているお店で、それぞれ1日に売れた数を数えるプログラムを作る場合には、ケーキごとに数を数えるために数値型の変数が3つ必要になります。

int sellCounterStrawberryShortCake = 0;
int sellCounterChocolateCake = 0;
int sellCounterNewYorkCheeseCake = 0;

// 売れたケーキの情報をレジなどから随時受け取る何らかの処理
// cakeNameがケーキの名前、sellCountが売れた数とする
~~~

// 情報を受け取る度に販売数を加算する処理
switch(cakeName) {
    case "StrawberryShortCake":
        sellCounterStrawberryShortCake += sellCount;
        break;
    case "ChocolateCake":
        sellCounterChocolateCake += sellCount;
        break;
    case "NewYorkCheeseCake":
        sellCounterNewYorkCheeseCake += sellCount;
        break;
}

これではケーキの種類が増える度に、変数とcase文を増やす必要があり、どんどん長く複雑なプログラムになってしまいます。

そこで、配列の登場です。配列はひとつの変数の中をいくつかに区切って、それぞれが変数として機能するようにしたものです。次のサンプルコードのように使うことができます。

    static void practiceArray() {
        int[] sellCounter = new int[3]; // 変数sellCounterをint型3つに区切る

        sellCounter[0] += 10;           // 区切った0番目に10を加算
        sellCounter[1] += 20;           // 区切った1番目に20を加算
        sellCounter[2] += 30;           // 区切った2番目に30を加算

        Logger.out(sellCounter[0]);     // それぞれの「変数」で
        Logger.out(sellCounter[1]);     // 加算した値を
        Logger.out(sellCounter[2]);     // 保持できている
    }
[2020/12/31 12:34:56.789] 10
[2020/12/31 12:34:56.789] 20
[2020/12/31 12:34:56.789] 30

3. 配列の宣言と代入


配列の宣言は以下のように行います。この場合には区切られた変数それぞれへの代入を行っていないため、それぞれ初期値自動的に代入されます。

宣言時に区切られた変数それぞれに値を代入する場合には、以下のようにします。

4. 配列の要素と添字


区切られた変数ひとつひとつのことを要素(ようそ)と呼びます。要素の数は宣言時または宣言と同時に行う代入の時点で必ず確定され、それ以降の追加や削除はできません。配列の要素数は配列の変数名に「.length」を付けることで取得できます。

各要素に代入や参照を行う場合には、何番目の要素であるかを示す添字(そえじ)を「[]」内に指定します。なお、この添字0から始まることに注意しましょう。

添字の指定にはint型の変数も使用できます。変数名には索引を意味する「Index」を付けることが一般的であり、添字に使う変数Index変数とも呼ばれます。

ケーキ販売数カウント処理の例は、売れたケーキの名前ではなく番号を受け取る仕組みにすることで、switch文を使わずにたった1行でケーキごとの加算処理が可能となります。

// int型の配列でカウンターを作成
int sellCounter = new int[3];

// 売れたケーキの情報をレジなどから随時受け取る何らかの処理
// cakeIndexがケーキの番号(0~2)、sellCountが売れた数とする
~~~

// 情報を受け取る度に販売数を加算する処理
sellCounter[cakeIndex] += sellCount;

問題

確認問題


確認問題1

この中で配列の説明として正しいものはどれか?