【Javaプログラミング超入門 #16】繰り返し(4):『配列』の繰り返し(ループ)

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は

Java超入門 #16
繰り返し(4):配列の繰り返し(ループ)

というテーマでお送りします。

これまでに、繰り返しの構文を全て学んできました。

そして今回は、この繰り返しの中で「配列」を扱います。

彩香
以前に学んだ「配列」と「繰り返し」の組み合わせ
少し複雑そうにも思えますが、頑張ります。

今回も、よろしくお願いします。

剛留
何だか、面白そうですね。どんな事ができるか、興味津々です。
今回も、頑張りますっ!
みのる
それでは 早速 いってみましょう。

【Youtube版】

Youtubeでもお伝えしていますので、是非チェックしてくださいね。

【1】配列の要素

① インデックスにリテラルを指定

配列を学んだ時に、こんな事を学びました。

配列の要素を表すために
添字(インデックス)を
指定する必要がある。

覚えていますか?

「配列」については、以下の記事でもご紹介しています。
参考にしてくださいね。

【Javaプログラミング超入門 #09】配列(1)

【Javaプログラミング超入門 #09】配列(1)

ここでも 簡単に復習しておきましょう。

配列は、同じ型のデータをひとくくりにして管理することで
配列の1つ1つの箱を「要素」といいます。

そして、Javaでは「要素」をこのように表現します。

配列名[添字(インデックス)]

配列名の後に [](大括弧・角括弧)を記述して
その中に添字(インデックス)を記述します。

このインデックスは、0 から始まる要素の番号です。

例えば int型配列 array 要素数 3 があるとします。
要素の表現は、先頭から…
array[0]、array[1]、array[2] です。

そして、以前に学んだ時には、このインデックスに 
[0],[1] というように、リテラルを指定していました。

何となく思い出しましたか?

② インデックスに変数を指定

そして今回、このインデックスに変数を指定できる
という事をお伝えます。

この例を見てみましょう。

int[] array = { 10, 20, 30 };
int idx = 2;
int result = array[idx];

まず、要素数 3 のint型配列 arrayを宣言し
10, 20, 30 で初期化しています。

次に、int型変数 idx を宣言し
2で初期化しています。

そして、最後の行で int型変数 result を宣言して
初期化しています。

初期化する値を考えましょう。

今まで学んだ 参照の概念は、変数 や 配列要素 を書くと
内部的に、その値に置き換わる というものでしたね。

ですので、まず idx の部分は 値 2 に置き換わります。

int result = array[idx];

int result = array[2];

array[idx] の部分は array[2] になりますね。

そして、array の 2 番目の要素は 30 ですので…

int result = array[2];

int result = 30;

array[2] の部分は 30 になって
result には 30 が代入される事となります。

まずは、この方法を覚えておきましょうね。

彩香
なるほど、なるほど…。
インデックスの部分を変数にすると…

インデックスの値の参照と、配列要素の参照、
2回 参照が行われるのですね。

理解しました。

剛留
はい、内容はわかりました。

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

みのる
剛留くん、疑問を持つこと、積極的に質問すること、大切ですね。
ありがとうございます。

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

剛留
はい、わかりました。

それでは、次にいきましょう。

【2】配列の繰り返し処理

① プログラムの組み立てかた

このような例題を考えましょう。

3教科の教科名の配列を宣言して初期化します。
 ”国語”、”算数”、”英語”

点数の配列を宣言して初期化します。
 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 の部分は
教科名の配列要素数 という意味です。

ここは、

i < sub.length

とすると 良いですね。

こうしておけば、配列要素を増やしても、for ループを修正しなくて良いので。

この部分も、覚えておきましょうね。

彩香
プログラムの組み立て方がわかってきました。
大枠から詳細、骨組みから肉付けですね。

演習に取り組みます。

剛留
ループカウンタを配列のインデックスとして活用すると
とっても便利に活用できますので…

更に、色々なプログラムが書けると思います。
引き続き、頑張ります!

【まとめ】

● 『配列』の繰り返し(ループ)

【1】配列の要素
・ 配列要素を使う時に指定する
  インデックスには
  変数を指定できる。
【2】配列の繰り返し処理
① プログラムの組み立て

・ 大枠から詳細に。

・ 骨組みから肉付け。

・ プログラムは外側の
  ブロックから内側へ…。

② 配列の繰り返し処理

・ 繰り返しのカウンタ変数を
  配列要素のインデックスとして
  活用することができる。

・ 配列の全要素を処理する場合や
  集計する時などに活用できる。