「1 から 5 まで順番に表示したい」。今までの書き方だと System.out.println を5回書くことになります。for 文を使うと、それを数行で済ませられます。
実行環境は引き続きブラウザ上のもの(paiza.IO や OneCompiler)です。
5回書くとこうなる
まずは for 文を使わずに書いてみます。
public class Main {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
}
}
1
2
3
4
5
動きますが、数が増えたら現実的ではありません。100回なら100行書くことになります。
for 文で書き直す
同じ結果を for 文で書くとこうなります。
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
}
}
1
2
3
4
5
5行あった println が2行になりました。しかも 5 を 100 に変えれば、そのまま100回くり返せます。
for 文の3つの部分
for (int i = 1; i <= 5; i++) は、;(セミコロン)で3つに区切られています。
| 部分 | コード | 意味 |
|---|---|---|
| 初期化 | int i = 1 | カウンタ変数 i を 1 から始める |
| 条件 | i <= 5 | i が 5 以下のあいだくり返す |
| 更新 | i++ | 1回の実行が終わるたびに i を 1 増やす |
ループの構造を図にするとこうなります。
flowchart TD
A["初期化: int i = 1"] --> B["条件: i <= 5 ?"]
B -->|true 成立| C["処理: println(i)"]
C --> D["更新: i++"]
D --> B
B -->|false 不成立| E["ループ終了"]
実際の値の変化を追うと、こうなります。
i = 1 → 条件 OK → println(1) → i を 2 に
i = 2 → 条件 OK → println(2) → i を 3 に
i = 3 → 条件 OK → println(3) → i を 4 に
i = 4 → 条件 OK → println(4) → i を 5 に
i = 5 → 条件 OK → println(5) → i を 6 に
i = 6 → 条件 NG → ループ終了
i++ は i = i + 1 の省略形です。「i を 1 増やす」と読んでください。
くり返しの範囲を変える
開始と終了を変えるだけで、くり返しの範囲をコントロールできます。
public class Main {
public static void main(String[] args) {
for (int i = 3; i <= 7; i++) {
System.out.println(i);
}
}
}
3
4
5
6
7
int i = 3 で開始を 3 に、i <= 7 で終了を 7 に変えました。変えたのは初期化と条件だけで、構造は同じです。
for と if を組み合わせる
for 文の中に if 文を入れると、「くり返しの中で条件を満たす場合だけ処理する」ことができます。
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
}
}
2
4
6
8
10
1 から 10 までくり返し、偶数(i % 2 == 0)だけを表示しています。前回の if 文と、その前の % がここでつながりました。
次の回へ
次はメソッドを使って「処理を名前のついたまとまりに分ける」方法を見ます。for 文でくり返す処理が増えてきたとき、メソッドに分けると読みやすくなります。