
今回は
というテーマでお送りします。
これまでに、繰り返しの構文を全て学んできました。
そして今回は、この繰り返しの中で「配列」を扱います。

少し複雑そうにも思えますが、頑張ります。
今回も、よろしくお願いします。

今回も、頑張りますっ!

【Youtube版】
Youtubeでもお伝えしていますので、是非チェックしてくださいね。
【1】配列の要素

① インデックスにリテラルを指定
配列を学んだ時に、こんな事を学びました。
添字(インデックス)を
指定する必要がある。
覚えていますか?
「配列」については、以下の記事でもご紹介しています。
参考にしてくださいね。
【Javaプログラミング超入門 #09】配列(1)
ここでも 簡単に復習しておきましょう。
配列は、同じ型のデータをひとくくりにして管理することで
配列の1つ1つの箱を「要素」といいます。
そして、Javaでは「要素」をこのように表現します。
配列名の後に [](大括弧・角括弧)を記述して
その中に添字(インデックス)を記述します。
このインデックスは、0 から始まる要素の番号です。
例えば int型配列 array 要素数 3 があるとします。
要素の表現は、先頭から…
array[0]、array[1]、array[2] です。

そして、以前に学んだ時には、このインデックスに
[0],[1] というように、リテラルを指定していました。
何となく思い出しましたか?
② インデックスに変数を指定
そして今回、このインデックスに変数を指定できる
という事をお伝えます。
この例を見てみましょう。
int idx = 2;
int result = array[idx];
まず、要素数 3 のint型配列 arrayを宣言し
10, 20, 30 で初期化しています。
次に、int型変数 idx を宣言し
2で初期化しています。
そして、最後の行で int型変数 result を宣言して
初期化しています。
初期化する値を考えましょう。
今まで学んだ 参照の概念は、変数 や 配列要素 を書くと
内部的に、その値に置き換わる というものでしたね。

ですので、まず idx の部分は 値 2 に置き換わります。
↓
int result = array[2];
array[idx] の部分は array[2] になりますね。

そして、array の 2 番目の要素は 30 ですので…
↓
int result = 30;
array[2] の部分は 30 になって
result には 30 が代入される事となります。
まずは、この方法を覚えておきましょうね。

インデックスの部分を変数にすると…
インデックスの値の参照と、配列要素の参照、
2回 参照が行われるのですね。
理解しました。

そして質問です。
これができると、どんな良いことがあるんですか?

ありがとうございます。
この部分は、次のコーナーで、配列の繰り返し処理をする時に
効果を発揮するんです。見ていきましょうね。

それでは、次にいきましょう。
【2】配列の繰り返し処理

① プログラムの組み立てかた
このような例題を考えましょう。
”国語”、”算数”、”英語”
点数の配列を宣言して初期化します。
83, 77, 91
繰り返し処理を使って、各教科名・点数を
表示して、最後に合計を表示してください。
このような課題にに対して
プログラムを組み立てて行く事を考えます。
慣れないと少し混乱する場合もありますね。
配列を使うし、繰り返し処理で表示するし
合計も最後に表示しなければならないし…。
このような時には、プログラムの組み立てとして
こんな風に考えていきましょう。
✅ 骨組みから肉付け。
✅ プログラムは外側の
ブロックから内側へ…。
配列の繰り返し処理の例を題材にして、次のコーナーで見ていきましょう。
② 配列の繰り返し処理
先程の例題をまずは大枠で考えてみましょう。
配列は2つですね。
科目名の配列と、点数の配列です。
ここでは、科目名の String型配列 を sub という名前で宣言し…
指定通りに “国語”、”算数”、”英語” で初期化します。
点数を表す int型配列 score を 83, 77, 91 で初期化します。
こちらも、指定通りです。

そして、大枠で考えて…
合計を表す変数 total を 0 で初期化します。
その後の処理の中で足していく事を考えます。
そして、次の処理の中では、各科目名と点数を表示し
total を算出する処理をします。
最後に total を表示します。

ここまで、大枠で考えて
その次に、黄色の背景の処理の中を考えていきましょう。
配列要素の全てに対して 処理をするという事で
0番目、1番目、2番目の処理を考えます。
ここでは、繰り返しの基本パターンが考えられます。
初期化式 i = 0、条件式 i < 3、条件変化式 i++ で
ループを回すパターンですね。
ここでも、中の処理(水色の背景の部分ですね)は
後で考えるとして、枠を考えます。

そして次に、実際の処理の中身を考えていきます。
1つは、教科名の配列の要素と、点数の配列の要素を
参照して表示する部分です。
インデックスは、変数を指定することができますので
ここでは、i を 指定しています。
i は、ループの中で、0, 1, 2 という値を持ちますからね。
今までの繰り返し処理では
この i を ループカウンタとして使っていましたが…
ここでは、ループカウンタとして使用するのと同時に
配列のインデックスとしても活用しています。
プログラムのほうでは、System.out.println で
教科名 と 文字列 “:”(コロン)と点数を 文字列連結します。
そして、total へ 点数配列の要素の値を足し込んでいます。
0番目、1番目、2番目と順に足し込んでいくことができます。

このような形で、大枠から詳細に考えていきましょう。
そして、処理の流れと変数の値の変化も 見ておきましょう。
まずは、配列の 要素 の初期化です。
イメージ的には 一連の箱 が準備されたという感じですね。

total の初期化です。順に足し込んでいくので初期値は 0 です。
forループに入って、初期化式で i に 0 を代入しています。
そして、条件式で継続の判断。
i は 0 で i < 3 は true ですので、処理を行います。

i は 0 ですので、sub[i] と書く と sub[0] に置き換わり
教科名配列 sub の 0 番目の要素を 参照する事となります。
同様に、score[i] は score[0] となり
点数配列 score の 0 番目の要素を参照します。
従って、System.out.println の中で、この2つの要素の間に
“:” を入れて表示すると、国語:83 と表示されます。

そして、total には score[0] の値を 複合代入演算子で
足し込んでいます。この事で、total は 0 ⇒ 83 に変化します。

条件変化式は i++ 、カウンタを 1 増やしています。
i は 0 から 1 になります。
そして、再度、条件式で継続の判断です。
i は 1 で i < 3 は true ですので、継続します。

i は 1 ですので、sub[i] は
教科名配列 sub の 1 番目の要素を参照して “算数”。
score[i] は、点数配列 score の
1 番目の要素を参照して 77 です。
従って、表示結果は、算数:77 となります。

total は 元の値 83 に、点数配列 score の
1番目の要素 77 を足して 160 になりますね。

条件変化式は i++ です。
カウンタを インクリメントして i は 1 から 2 になります。
そして、再度、条件式で継続の判断です。
i は 2 で i < 3 は true ですので、ブロック継続。
教科名配列 sub の 2番目の要素 “英語”と
点数配列 score の 2番目の要素 91 を参照して
表示結果は、英語:91 。

total は 元の値 160 に 点数配列 score の
2 番目の要素 91 を足して 251 になります。

条件変化式では
i がインクリメントされて 2 から 3 になります。
そして、条件式で継続の判断です。
i は 3 で i < 3 は false になりますね。
ここで、ループを抜けて
次の処理に 進むこととなります。

ここまでで、表示されているのは
国語:83、算数:77、英語:91 ですので…
あとは、合計を表示すれば良いですね。

という事で、最後に合計を表示します。
プログラムでは、”合計:”という文字列に続けて
total を表示しています。 total の値は 251 です。
少し複雑そうに思える事も、このように順序立てて考えていくと
プログラムを組み立てることができますね。
今回のポイントは…
ループの中で使うと効果が発揮されます。
❷ プログラムの組み立ては、大枠から詳細へ
考えていくと進めやすいです。
❸ 少し複雑になってきたら、処理の流れと変数の値の変化を
イメージするか、メモに書いてみると良いですね。
3つのポイント、押さえておきましょうね。
また、今回、条件式を i < 3 としましたが、この 3 の部分は
教科名の配列要素数 という意味です。
ここは、
とすると 良いですね。
こうしておけば、配列要素を増やしても、for ループを修正しなくて良いので。
この部分も、覚えておきましょうね。

大枠から詳細、骨組みから肉付けですね。
演習に取り組みます。

とっても便利に活用できますので…
更に、色々なプログラムが書けると思います。
引き続き、頑張ります!
【まとめ】
● 『配列』の繰り返し(ループ)
インデックスには
変数を指定できる。
・ 大枠から詳細に。
・ 骨組みから肉付け。
・ プログラムは外側の
ブロックから内側へ…。
② 配列の繰り返し処理
・ 繰り返しのカウンタ変数を
配列要素のインデックスとして
活用することができる。
・ 配列の全要素を処理する場合や
集計する時などに活用できる。
今回も、ご覧いただき、ありがとうございます。