Menu

Java の for ループ:構文、例、そして拡張 for-each

Java の for ループを解説:古典的な3部構成のループ、配列やリストの反復処理、ネストしたループ、break と continue、そして拡張 for-each。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

古典的な3部構成の for ループ

for ループは、制御された回数だけブロックを繰り返します。Java の形式では、丸括弧の中にセミコロンで区切られた3つのものを詰め込みます:

3つの部分は決まったリズムで動きます:

  1. 初期化int i = 0)- 何よりも先に、一度だけ実行されます。
  2. 条件i < 5)- 各反復の前にチェックされ、偽になるとループは止まります。
  3. 更新i++)- 各反復のあと、条件が再びチェックされる前に実行されます。

つまりこれは i = 0 から i = 4 までを出力します。カウンタ i のスコープはループ内に限られ、閉じ波括弧のあとには存在しません。

増やす、減らす、ステップで数える

3つの部分でカウンタを完全に制御できます:

i-- は減らし、i += 5 は5ずつ跳びます。条件が方向に応じた停止を決めます:減らすときは > を、増やすときは < または <= を使います。

配列を反復処理する

カウンタ付きループは配列と自然に組み合わさり、.length を上限、i をインデックスとして使います:

colors.length は括弧のないフィールドである点に注意してください。配列はその点で特別です。一方 Listlist.size() を使います。条件 i < colors.length は正しく、インデックスは 0 から length - 1 まで動くので、<<= ではなく)を使うことで範囲外エラーを避けられます。

拡張 for-each ループ

各要素だけが必要でインデックスは一切いらないとき、拡張 for はよりすっきりしていて間違えにくくなります。1ずれ(off-by-one)を起こすカウンタがありません:

for (String color : colors) は「colors の中の各 color について」と読みます。配列や反復可能なものすべてで使えます。トレードオフ:インデックスがなく、たどっている最中にコレクションへの追加や削除ができません(それは ConcurrentModificationException を投げます)。どちらかが必要なときはカウンタ付きループに頼ってください。

ネストしたループ

ループの中のループ - グリッド、表、組み合わせに便利です。内側のループは外側の各反復ごとに完全に実行されます:

これは 3x3 の掛け算グリッドを出力します。ネストが深くなったら、カウンタに ij ではなく意味のある名前(rowcol)を付けましょう。どちらがどちらか混同せずに済みます。

break と continue

break はループから即座に抜けます。continue は現在の反復の残りを飛ばし、更新ステップへ進みます:

これは 1 3 5 7 を出力します。continue は偶数を飛ばし、breaki が 7 を超えそうになった時点でループを終了します。ネストしたループでは、ラベル付き break を使わない限り、どちらも最も内側のループにのみ作用します。

無限ループに注意

条件が決して偽にならないと、ループは永遠に動き続けます。よくある原因は、更新を忘れることや、カウンタを間違った方向に動かすことです:

for (int i = 0; i < 5; i--) {   // i は減り続けるだけ -> 5 には決して達しない
    System.out.println(i);
}

意図的な無限ループは3つの部分すべてを省略し -for (;;) { ... }- 内部の break に頼って止めます。これは控えめに使いましょう。while (true) のほうがたいてい読みやすくなります。

次:while ループ

for ループはカウンタが前もって分かっているときに輝きます。ある条件が変わるまで繰り返したい - そしてきれいなカウンタがない - ときには、while ループのほうが合います。それが次のページです。

よくある質問

Java の for ループの構文はどのようなものですか?

Java の for ループは、丸括弧の中にセミコロンで区切られた3つの部分を持ちます:for (初期化; 条件; 更新) { ... }。例えば for (int i = 0; i < 5; i++) { ... }i を 0 から始め、i < 5 の間は本体を実行し、各反復のあとに i に 1 を加えます。3つの部分はすべて省略可能です。

Java の for ループと for-each ループの違いは何ですか?

古典的な for ループは明示的なカウンタを使うので、インデックスと方向を自分で制御できます。インデックスが必要なときや要素を飛ばしたいときに最適です。拡張 for-each ループ for (型 要素 : コレクション) は、インデックスなしですべての要素を順番にたどります。各要素だけが必要で位置は一切いらないときに、よりすっきりします。for-each はループ中にコレクションの構造を変更できません。

Java で配列を反復処理するにはどうすればよいですか?

カウンタ付きループでインデックス指定する -for (int i = 0; i < arr.length; i++) { arr[i] を使う; }- か、インデックスが不要なら for-each を使います:for (int x : arr) { x を使う; }。配列はサイズを .length フィールド(括弧なし)で公開し、リストは .size() を使います。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める