for文
目次
- 解説
- 1. for文
解説
1. for文
ループはその性質から、配列とセットで使用されることが非常に多いのですが、前のページで学習した通り、while文の場合は次のような書き方が必要となります。
- while文の前で、Index変数の宣言と代入を行う
- ブロックの中で、Index変数を変化させる
- 条件式で、Index変数と要素数を比較する
この場合、添字管理用のコードが分散してしまうことや、書き忘れによる無限ループに繋がりやすいことなど、少し不便です。
static void practiceWhile() {
int[] sellCounter = new int[] { 10, 20, 30 };
int counterIndex = 0; // 添字管理の為のコード
while (counterIndex < sellCounter.length) {
Logger.out(sellCounter[counterIndex]); // 本当に行いたい処理
counterIndex++; // 添字管理の為のコード
}
}
そこでfor文の登場です。for文はこれらの添字管理用のコードが1行に凝縮されています。
static void practiceFor() {
int[] sellCounter = new int[] { 10, 20, 30 };
for (int idx = 0; idx < sellCounter.length; idx++) {
Logger.out(sellCounter[idx]);
}
}
キーワード「for」に続く丸括弧の中はセミコロン「;」で3つに区切られています。仮に
for ( A; B; C ) { ~ }
とした場合、
- Aで、Index変数の宣言と代入を行う
- Bで、Index変数と要素数を比較する(=条件式)
- Cで、Index変数を変化させる
のようになっています。言い換えると、
- Aは、for文のいちばん最初に1回のみ実行される
- Bは、ブロックを実行する前に毎回評価される
- Cで、ブロックを実行した後に毎回実行される
という構造となっており、配列の添字などのように、連続して変化する値を使用するループ処理を行うことに最適です。このような場合にはwhile文よりfor文を使用するようにしましょう。
なお、for文ではIndex変数のスコープが、ブロック内に限定されるということも大きなメリットです。Index変数の変数名は、添字としての用途が明確となることや、for文の行が長くなり過ぎることを防ぐ目的から、「idx」や「i」のような短縮形を用いることが一般的です。
問題
確認問題
確認問題1
次のコードの中で、for文の使い方が正しく、
変数aの値が最終的に8となる構文はどれか。
実践問題
(1) | VSCodeを起動し、ヘッダーメニューの「ファイル」>「フォルダーを開く...」から、「workspace_java_basic」プロジェクトを開いてください。 |
(2) | 「workspace_java_basic」プロジェクトの「net.digskill」 パッケージの「ArrayAndLoop.java」を開いてください。 ※無い場合は「配列」を先に学習しましょう。 |
(3) | 「ArrayAndLoop」クラス内に次のサンプルコードのメソッドをコピー&ペーストし、 mainから呼び出せるようにして、「F5」で実行できることを確認してください。 |
(4) | コメント行に記された各問題文に対し、答えとなるプログラムコードを 問題文の次の空白行以降に書き込みまたは書き換えて、「F5」で実行してください。 |
static void questionFor() {
// (問1)空白行にString型の配列変数arrayQ1を作成し、
// 「あ」「い」「う」「え」「お」の5つの要素を代入してください。
// 続けてfor文によるループ処理を作成し、
// 変数displayQ1にすべて結合させてください。
String displayQ1 = "";
Logger.out(displayQ1);
// (問2)空白行にfor文によるループ処理を作成し、
// arrayQ1から「あ」「う」「お」のみを
// 変数displayQ2に結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
String displayQ2 = "";
Logger.out(displayQ2);
// (問3)空白行にfor文によるループ処理を作成し、
// 変数displayQ3にarrayQ1の中身を逆順ですべて結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
String displayQ3 = "";
Logger.out(displayQ3);
// (問4)空白行にfor文によるループ処理を作成し、
// 変数displayQ4にarrayQ1の中身の内、
// 「え」のみを除いて逆順で結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
String displayQ4 = "";
Logger.out(displayQ4);
}