配列とは?②(値の代入、値の取り出し)【ゼロから始めるJavaの基礎~その15~】
前回は『配列の宣言と生成』の方法をご紹介しました。
配列は一つの変数名で、複数の値をまとめて保管しておくことが出来るのでしたね。
今回は配列に値を保管(代入)する方法と、保管した値を使用する方法をご紹介しますが、それらの処理を行う際には配列の『インデックス(添字-そえじ-)』という考え方についてを知っておく必要がありますので、そちらの紹介からしていきます。
インデックス(添字)とは
『配列には複数の値を保管できる』ということはご紹介しましたが、それらの値を1つずつ別々に扱いたい場合も出てきます。
その様な時に値それぞれを識別するために使用するのが『インデックス(添字)』と呼ばれる番号です。イメージとしては出席番号の様なものとイメージしてもらうのがよいかと思います。
データ型[] 配列変数名 = new データ型[要素数];
(例)int[] numbers = new int[3];
この構文は前回の内容でご紹介した、配列を生成する際の構文ですね。
new演算子を使用し『[ ]』の中に要素数を記述することで、保管したいデータの数を指定できるのでした。例の場合だと要素を3つ保管できる配列を生成していますね。
インデックスは保管場所を識別する番号として自動的に割り振られる番号で、配列の先頭の保管場所を起点として『0』から始まる番号が順に割り振られます。雑な画像で申し訳ないのですが、イメージとしてはこんな感じです(笑)
1つ目の保管場所には0番、2つ目の保管場所には1番といった具合に、保管場所の識別番号が用意されているというわけです。
まずはこの特定の保管場所を指定するための構文を見てみましょう。
配列変数名[インデックス];
(例)numbers[0];(※numbersという配列の1番目の値)
インデックスは『0』からスタートし、配列の1つ目の値と紐付けられるということは間違えやすいポイントですので、しっかりと覚えておいてくださいね。
値を代入する
インデックスのルールはお分かりいただけましたでしょうか?
次は実際に値を代入していきましょう。
まずはサンプルをご覧ください。
【サンプル】
int[] numbers = new int[3];
numbers[0] = 3;
numbers[1] = 6;
numbers[2] = 9;
1行目は先ほどもご紹介した配列の宣言と生成の構文です。『3つの要素を保管できる、numbers』という配列を準備しています。
この配列に3行目~5行目で値を代入しています。代入の構文は次のとおりです。
配列変数名[インデックス] = 値;
(例)numbers[0] = 3;
3行目はインデックスが0なので、1つ目の要素の値として、『6』という整数値を代入していることが分かりますね。
4行目と5行目もそれぞれ2つ目、3つ目の要素として配列に値を代入しています。
初期化子を使用した代入方法
実は配列に値を代入する構文はもう一種類あります。
正確には、配列の宣言から代入までを1行でまとめて記述する構文ですね。構文とサンプルを見てみましょう。
データ型 配列変数名 = {要素1, 要素2,…};
(例)int numbers[] = {101,205,307};
左辺の記述方法は前回ご紹介した構文と同じです。
右辺はnew演算子が使われなくなり、代わりに『{}(中括弧)』で数値が囲まれていますね。
この『{}』は『初期化子』と呼ばれる記号で、配列の領域の確保と値の代入を行う働きを持っています。
値は『,(カンマ)』で区切って記述することで複数定義することが出来ます。
配列の宣言を行う段階で、代入する値まで決まっている場合は初期化子を使用するほうがシンプルに記述することが出来ますね。
初期化子を使用する場合は、『new演算子を使用しない』点は間違えやすいので注意しましょう。
初期化子を使用する際は要素数を指定していませんが、記述した要素の数が要素数となります。この場合も後から要素の数を増やす(追加する)ことはできませんので注意が必要です。
値を取り出す(使用する)
代入する方法が分かったところで、今度は配列に保管されている値を使用する方法を学んでいきましょう!
配列には値が複数保管されている場合がほとんどですが、それぞれの値を一つずつを指定して使用することが出来ます。
この場合も『インデックス(添字)』を使用して、どの値を取り出すのかを指定します。早速サンプルを見ていきましょう。
【サンプル】
// 配列の初期化
int[] numbers = {3, 6, 9};
// インデックス0番の値をコンソールに出力する
System.out.println(numbers[0]);
// インデックス1番の値をコンソールに出力する
System.out.println(numbers[1]);
// インデックス2番の値をコンソールに出力する
System.out.println(numbers[2]);
【実行結果】
2行目では値を3つ持つ配列を生成しています。
5行目からはインデックス0番に保管されている値から順に『配列変数名[インデックス]』という構文を使用して値を取り出し、コンソールに出力しています。
値を上書きする(再代入)
変数の値を、他の値に書き換えることが出来たように、配列に保管されている値も再代入をすることで上書きをすることが出来ます。
配列変数名[インデックス] = 再代入する値;
次のサンプルでは、配列から値を取り出してコンソールに出力したあと、その値を書き換えてからもう一度コンソールに出力しています。
【サンプル】
// 配列の初期化
int[] numbers = {3, 6, 9};
// インデックス0番の値をコンソールに出力する
System.out.println(numbers[0]);
// インデックス0番に別の値を再代入する
numbers[0] = 300;
// 再度インデックス0番の値をコンソールに出力する
System.out.println(numbers[0]);
【実行結果】
配列の長さを調べる(length)
最後に配列の長さを調べる便利な構文を紹介します。
配列をプログラム内で使用する場合、その配列がもつ要素の数を調べたり、その数を使いたい場合が出てきます。
そんな時、目視で数えるのも一つの手ではありますが、プログラムを作るときには人間による『見間違えや数え間違え』など、いわゆる『ヒューマンエラー』は極力排除することが推奨されます。
たとえ要素数が5個しかなかったとしても、目が疲れていて6個だと勘違いしてしまう可能性はありますよね?(笑)
少し話がそれてしまいましたので、配列の要素数を調べる構文のご紹介に戻りたいと思います。
配列変数名.length
(例)numbers.length
構文は配列変数名に続いて『.length』とするだけというシンプルなものですので、実際に配列の長さを取得して、コンソールに出力するサンプルも見てみましょう。
【サンプル】
// 配列の初期化
int[] numbers = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
// 配列の要素数を変数に代入
int count = numbers.length;
// 変数の値をコンソールに出力する
System.out.println("配列の要素数は『" + count + "』です");
【実行結果】
2行目では適当な要素数の配列を生成しています。5行目では整数(int)型の『count』という変数を用意して、『配列変数名.length』の構文の結果として返される要素数を代入しています。
8行目ではわかりやすいように文字列連結で、要素数をコンソールに出力しています。
文字列連結について忘れてしまったという方は、こちらの記事を復習しておくといいかもしれません。
今回は配列に値を代入したり、保管されている値の使い方を見てきました。
配列に関する、少し踏み込んだ基礎知識に関しては以下の記事でまとめている予定です。余力がある方は見ておくことをオススメします。
- 配列の参照先について
- 多次元配列とは?
「ちょっと今は余裕が…」という方はいったん無視して先に進んでもらっても大丈夫です!
現場に出るまでには覚えておきたい内容ですので、そのうち見ておくといいかなと思います。
今回も最後までお読み頂きありがとうございました!
次はいよいよ『条件分岐』という範囲に入っていきます。
条件分岐が実装出来るようになると、プログラミングが出来るようになって来ていると感じられるはずです。
それではまた次回も遊びに来てくださいね!お疲れ様でした。