ループ文の要点
内容の確認日: 2026-10-03
この分野では、ループが「何回」「どの値で」実行されるかを正確に追えるかが問われます。出力を答える問題がほとんどなので、ループ変数の値を表に書き出しながら 1 回ずつ追うのが確実です。
出題項目は「while 文の使用」「for 文および拡張 for 文の使用」「do-while 文の作成と使用」「ループのネスティング」の 4 つです。特に、ネストしたループの中の break と continue がどのループに効くかは、よく問われます。
while 文
while (条件) { 処理 } は、先に条件を判定し、true の間だけ処理を繰り返します。条件はループの先頭で毎回判定されるので、条件が false になった回の値は処理されません。
public class Main { public static void main(String[] args) { int x = 7; while (x > 0) { System.out.println(x); x -= 3; } }}java Main 7 4 1
x は 7 → 4 → 1 → -2 と変わり、-2 になったところで条件が false になってループを抜けます。ループの中で条件に使う変数を変え忘れると、条件がずっと true のままの無限ループになります。{ } を省略した while は直後の 1 文だけが対象になる点にも注意しましょう。
条件に false を直接書いた while (false) { ... } は、中身が絶対に実行されない「到達できないコード」とみなされ、コンパイルエラーになります。
do-while 文
do { 処理 } while (条件); は、先に処理を 1 回実行してから条件を判定します。そのため、条件が最初から false でも、処理は必ず 1 回は実行されます。while 文との一番の違いはここです。
public class Main { public static void main(String[] args) { int n = 10; while (n < 5) { System.out.println("while: " + n); } do { System.out.println("do-while: " + n); } while (n < 5); }}java Main do-while: 10
do-while 文は、最後の while (条件) の後ろにセミコロンが必要です。書き忘れるとコンパイルエラーになります (while 文や for 文の ) の後ろには付けません)。
for 文
for (初期化; 条件; 更新) { 処理 } は、「初期化 → 条件判定 → 処理 → 更新 → 条件判定 → 処理 → …」の順に実行されます。初期化は最初に 1 回だけ、更新は処理の後に行われます。更新は i++ に限らず、どんな式でも書けます。
public class Main { public static void main(String[] args) { for (int i = 1; i <= 10; i *= 3) { System.out.println(i); } }}java Main 1 3 9
初期化と更新には、カンマで区切って複数の式を書けます。初期化で複数の変数を宣言するときは、同じ型にする必要があります (int i = 0, j = 5 は可、int i = 0, long j = 5 は不可)。また、初期化・条件・更新はすべて省略でき、for (;;) は無限ループになります。
public class Main { public static void main(String[] args) { for (int i = 0, j = 5; i < j; i++, j--) { System.out.println(i + "-" + j); } }}java Main 0-5 1-4 2-3
for 文の初期化で宣言した変数は、その for 文の中でしか使えません。ループが終わった後に値を使いたいときは、for 文の前で宣言しておきます。
public class Main { public static void main(String[] args) { for (int i = 0; i < 3; i++) { System.out.println(i); } System.out.println(i); }}javac Main.java
コンパイルエラー (6 行目): 変数 i は for 文の中でしか使えない
拡張 for 文
for (型 変数 : 配列) { 処理 } は、配列の要素を先頭から順に 1 つずつ取り出して処理します。添字を使わずに書けるので、すべての要素を順番に読むときに便利です。
ただし、ループの変数には要素の値がコピーされて入ります。ループの変数に代入しても、配列の要素は変わりません。配列の要素を書き換えたいときは、添字を使う通常の for 文を使います。
public class Main { public static void main(String[] args) { int[] scores = {60, 70, 80}; for (int s : scores) { s += 10; } System.out.println(scores[0]); for (int i = 0; i < scores.length; i++) { scores[i] += 10; } System.out.println(scores[0]); }}java Main 60 70
拡張 for 文では、添字や「何番目か」は分かりません。また、配列を逆順にたどったり、途中から始めたりすることもできません。
ループのネストと break・continue
ループの中にループを書くと、外側のループ 1 回ごとに、内側のループが最初から最後まで実行されます。内側のループの条件が外側の変数 (j <= i など) に依存している場合は、外側の回ごとに内側の回数が変わるので、表に書いて追いましょう。
break はループを終了し、continue はその回の残りの処理を飛ばして次の回に進みます。どちらも、それを囲む一番内側のループにだけ効きます。外側のループは続きます。
public class Main { public static void main(String[] args) { for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { if (j == 2) continue; if (i == 3) break; System.out.print(i + "" + j + " "); } } System.out.println(); }}java Main 11 13 21 23
j == 2 の回は continue で出力が飛ばされますが、内側のループは続きます。i == 3 の回は内側のループが break で終わりますが、外側のループは i <= 3 の判定まで進み、そこで終わります。
外側のループまでまとめて抜けたいときは、ループの前にラベルを付けて break ラベル名; と書きます。continue ラベル名; も同様に、ラベルを付けたループの次の回に進みます。
public class Main { public static void main(String[] args) { outer: for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { if (i * j == 4) break outer; System.out.println(i + " x " + j + " = " + (i * j)); } } }}java Main 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 2 x 1 = 2
試験でよくある引っかけ
whileとdo-whileの実行回数条件が最初から
falseなら、while文は 0 回、do-while文は 1 回実行されます。do-while文の最後のセミコロン} while (条件);のセミコロンを忘れるとコンパイルエラーです。for文の変数をループの外で使うfor (int i = 0; ...)のiはループの外では使えず、コンパイルエラーになります。拡張
for文で配列を書き換える拡張
for文の変数に代入しても、配列の要素は変わりません (値のコピーに代入しているだけ)。break・continueが効くループネストしたループの
breakやcontinueは、一番内側のループにだけ効きます。外側まで抜けるにはラベルを使います。条件の境界
<と<=の違いで回数が 1 回ずれます。最後の回と、条件がfalseになる値を必ず確かめましょう。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- Oracle University 日本「1Z0-818-JPN (Java SE Bronze) 試験」
- Java 言語仕様 (Java SE 11) 14.12〜14.16「while・do・for・break・continue」
- The Java Tutorials「The for Statement」
- The Java Tutorials「Branching Statements」
コード例は、試験の対象バージョンで実際にコンパイル・実行して結果を確認しています。