第3回 では、条件分岐を学びました。 今回は、プログラミングの恩恵をもっとも実感できる機能 — 繰り返し処理(ループ) を学びます。
「1〜100 までの合計を計算する」「リストの全要素を表示する」のような、同じ処理を何度も繰り返す 場面で活躍します。
繰り返し処理とは
たとえば「1から10までの数字を全部表示する」というプログラムを、繰り返しなしで書くとどうなるでしょうか?
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
// ... 以下、10まで続く
これは大変ですし、100まで や 1000まで だったら現実的ではありません。 そこで登場するのが、繰り返し処理(ループ) です。
Java には主に 3 種類のループ があります。
| 構文 | 適している場面 |
|---|---|
for 文 | 繰り返す回数があらかじめ決まっている |
while 文 | 繰り返す回数が分からず「条件を満たす間だけ」繰り返したい |
do-while 文 | 最低 1 回は実行したい |
拡張 for 文 | 配列やリストの要素を全部処理したい |
順番に見ていきましょう。
for 文 — 「N 回繰り返したい」
もっともよく使うループが for 文 です。
基本形
for (初期化; 条件; 更新) {
// 繰り返したい処理
}
なんだか難しそうに見えますが、3 つのパーツ が並んでいるだけです。
| パーツ | 意味 | よくある書き方 |
|---|---|---|
| 初期化 | ループ開始時に1回だけ実行 | int i = 0 |
| 条件 | この条件が true の間ループを続ける | i < 10 |
| 更新 | 1 回ループするごとに実行 | i++ (= i = i + 1) |
例: 1 から 5 まで表示する
public class ForDemo {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
}
}
実行結果:
1
2
3
4
5
動作のイメージ
i = 1で開始(初期化)1 <= 5はtrue→ ループ内を実行 →1を表示i++でi = 2(更新)2 <= 5はtrue→2を表示- … これを繰り返し
i = 6になったら6 <= 5はfalse→ ループ終了
例: 1 から 100 までの合計
ループの中で計算を積み重ねれば、合計を求められます。
int total = 0;
for (int i = 1; i <= 100; i++) {
total = total + i; // total += i; と書いても同じ
}
System.out.println("合計: " + total);
実行結果:
合計: 5050
1 + 2 + 3 + ... + 100 = 5050 を、たった3行で計算できました。
while 文 — 「条件を満たす間繰り返す」
繰り返す回数が事前に分からないときは while 文 を使います。
基本形
while (条件) {
// 繰り返したい処理
}
例: 残高が 0 になるまでお金を引き出す
public class WhileDemo {
public static void main(String[] args) {
int balance = 1000;
while (balance > 0) {
System.out.println("残高: " + balance + "円");
balance = balance - 300;
}
System.out.println("残高がなくなりました");
}
}
実行結果:
残高: 1000円
残高: 700円
残高: 400円
残高: 100円
残高がなくなりました
ループ内で balance が変化し、balance > 0 が false になった時点でループが終わります。
⚠ 無限ループに注意
while 文で 条件を変化させ忘れる と、永久にループが続いてしまいます。これを 無限ループ と呼びます。
int i = 0;
while (i < 10) {
System.out.println(i);
// ❌ i++ を書き忘れると、永久に 0 を表示し続ける!
}
実行してしまった場合は、ターミナルで Ctrl + C を押して強制終了してください。
do-while 文 — 「最低 1 回は実行したい」
while の親戚の do-while 文 は、条件のチェックを最後に行う のが特徴です。
そのため、条件が最初から false でも、最低 1 回は実行されます。
int count = 100;
do {
System.out.println("count = " + count);
count++;
} while (count < 10); // この時点で 100 < 10 は false なので、1回だけ実行
実行結果:
count = 100
💡 「ユーザーに必ず1回は入力させたい」のような場面で活躍します。実務では
forやwhileのほうがよく使われます。
拡張 for 文(for-each) — 「配列やリストの全要素を処理」
データの集まり(配列・リスト)があるときは、拡張 for 文(for-each) が便利です。
例: 名前のリストを全部表示する
public class ForEachDemo {
public static void main(String[] args) {
String[] names = {"佐藤", "鈴木", "高橋", "田中"};
for (String name : names) {
System.out.println(name + "さん");
}
}
}
実行結果:
佐藤さん
鈴木さん
高橋さん
田中さん
for (型 変数名 : 配列) という書き方で、配列の 各要素を1つずつ取り出して 処理できます。
names.length などを意識せずに済むため、配列の全要素を処理したいときの第一選択肢 です。
💡 配列(
String[])については本連載の続編で詳しく解説します。今は「同じ型のデータをまとめて並べたもの」と理解すれば OK。
break — ループの途中で抜ける
ループの中で 特定の条件を満たしたら、その時点でループを終わらせたい ときは break を使います。
for (int i = 1; i <= 100; i++) {
if (i == 5) {
System.out.println("5 で終了!");
break; // ループを脱出
}
System.out.println(i);
}
実行結果:
1
2
3
4
5 で終了!
i == 5 になった時点で、ループそのものから抜けています。
continue — その回だけスキップして次へ
continue は 「この回だけ飛ばして、次の回に進む」 命令です。
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // i == 3 のときはスキップ
}
System.out.println(i);
}
実行結果:
1
2
4
5
i == 3 のときは System.out.println(i); がスキップされ、次の繰り返しに進んでいるのが分かります。
ネスト(入れ子)ループ — 九九の表
ループの中にループを入れると、表のような2次元的な処理 ができます。
public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(i * j + "\t"); // \t はタブ文字
}
System.out.println(); // 改行
}
}
}
実行結果(抜粋):
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
...
💡
System.out.print()は 改行なし、System.out.println()は 改行あり で表示します。
練習問題
以下の3つのプログラムを書いてみましょう。
問題 1: 1〜10 の偶数だけを表示する
期待する出力:
2
4
6
8
10
問題 2: 1〜100 のうち、3 の倍数だけの合計を計算する
ヒント: i % 3 == 0 で「3 で割り切れる」かをチェックできます(% は剰余演算子)。
問題 3: 拡張 for 文を使って、配列の中身の合計を求める
int[] scores = {80, 75, 92, 60, 88};
解答例
public class LoopExercise {
public static void main(String[] args) {
// 問題1: 偶数を表示
System.out.println("--- 問題1 ---");
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
// 問題2: 3の倍数の合計
System.out.println("--- 問題2 ---");
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
sum += i;
}
}
System.out.println("3の倍数の合計: " + sum);
// 問題3: 配列の合計
System.out.println("--- 問題3 ---");
int[] scores = {80, 75, 92, 60, 88};
int total = 0;
for (int s : scores) {
total += s;
}
System.out.println("合計: " + total);
System.out.println("平均: " + (total / scores.length));
}
}
まとめ
第4回では、以下を学びました。
- ✅
for文 は繰り返す回数が決まっているときに使う - ✅
while文 は条件を満たす間繰り返したいときに使う - ✅
do-while文 は最低 1 回は実行したいときに使う - ✅ 拡張
for文(for-each) は配列やリストの全要素を処理する - ✅
breakでループから脱出、continueでその回だけスキップ - ✅ ループは ネスト できる(九九表など)
- ✅
whileで条件を変化させ忘れると 無限ループ になるので注意
これで、Java の基本構文(変数・条件分岐・ループ)はマスターしました! ここまで来れば、簡単な計算プログラムや判定プログラムは自分で書ける はずです。
次回以降の連載では、配列・メソッド・クラス といった、より本格的な内容に進んでいきます。 お疲れさまでした、また次回お会いしましょう!