Javaのループ処理入門|for文の基本構文と拡張forとの違いを初心者向けに解説

Java入門・実践
スポンサーリンク

for文に慣れたと思ったら、新しいやつが来た件。

Javaの勉強を始めたころ、「for文って便利!」と少しずつ慣れてきて、ようやく「私、成長してるかも」と感じ始めていたある日。

コードの中に、突然見慣れない書き方が登場しました。

Java
for (String item : items)

「なにこのコロン(:)!?」

「普通のforじゃダメなの!?」

そう、これが“拡張for文”との出会いでした。完全に油断していました。

普通のfor文と見た目も動きも違うし、「便利そうなのにどう違うのかがわからない…」と混乱してしまったのをよく覚えています。

この記事では、そんな「2種類のfor文の使い方の違いに戸惑っている方」のために、

  • 通常のfor文の基本構文
  • 拡張for文との違い
  • どちらをいつ使えばいいか

などを、初心者目線でやさしく解説していきます!

拡張for文に戸惑って、そっとエディタを閉じたことがある方も大丈夫。

このページを読み終えるころには、「使い分け、わかってきたかも!」という感覚を持てるようになるはずです

スポンサーリンク
  1. 基本のfor文の書き方と仕組みをマスターしよう
    1. for文って何をしてるの?
    2. for文の3つのパーツ
    3. 頭でイメージするとわかりやすい!
    4. 応用:カウントダウンもできる!
    5. for文が向いている場面
    6. まとめ
  2. 拡張for文(foreach)の使い方と特徴
    1. 拡張for文って何?
    2. 基本の構文
    3. 通常のfor文とどう違うの?
    4. 拡張for文のメリット
    5. 逆に、こんなときは不向き
    6. Listでも使ってみよう!
    7. まとめ
  3. 通常forと拡張for、どう使い分けるのが正解?
    1. ざっくりまとめると…
    2. それぞれの得意な場面
      1. 通常のfor文が向いているケース
      2. 拡張for文が向いているケース
    3. 実務ではどうなの?
    4. 最後にひとこと:迷ったらまずは拡張for文でOK!
  4. 業務コードでよくあるループのパターンを読み解こう
    1. パターン①:一覧データを全件処理する
    2. パターン②:ループ内で条件分岐する
    3. パターン③:ループの中でデータを生成・加工
    4. 初心者が混乱しやすいポイント
    5. 補足:Stream APIで見かける未来バージョン
    6. まとめ:業務で使われるfor文の8割は“繰り返し+条件分岐”
  5. よくある初学者のつまずきと注意点
    1. 無限ループになってプログラムが止まらない!
    2. インデックスの境界で「ArrayIndexOutOfBoundsException」
    3. for文の中でリストを変更してエラーに
    4. 条件が間違っていてループしない・しすぎる
    5. 拡張for文でindexを使いたくなる問題
    6. 最後に:つまずくのは“伸びしろ”の証拠
  6. まとめ 〜for文がわかると、Javaがもっと楽しくなる!

基本のfor文の書き方と仕組みをマスターしよう

Javaを学び始めたとき、まず登場するのがこの「for文(通常のfor)」です。

最初はちょっととっつきにくく見えますが、ちゃんと構造を理解すれば「あ、こう動くのか!」と納得できるようになります。

for文って何をしてるの?

一言でいうと、「同じ処理を何度も繰り返す仕組み」です。

たとえば「0〜4までの数字を順番に出力したい」とき、こんなふうに書きます。

Java
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

出力結果:

0
1
2
3
4

for文の3つのパーツ

ぱっと見だと「なんだこのカッコの中身は…」となりますが、実はとても論理的。

中身は3つのパートでできています。

Java
for (① 初期化; ② 条件; ③ 増減処理) {
    ④ 繰り返したい処理
}

さっきのコードで分解してみましょう:

Java
for (int i = 0;        // ① 初期化:変数iに0を代入  
     i < 5;            // ② 条件:iが5より小さい間、処理を続ける  
     i++) {            // ③ 増減処理:1回ごとにiを+1する
    System.out.println(i); // ④ 処理:今のiを表示
}

この流れで、「i = 0から始まって、i < 5の間だけ繰り返して、1ずつ増えていく」という動きをしているわけです。

頭でイメージするとわかりやすい!

for文を「繰り返しマシン」として擬人化してみると…

  • i = 0 からスタート(初期化)
  • 条件(i < 5)をチェック → true なら処理へ!
  • 中のコードを実行
  • i++ でインクリメント
  • また条件チェック → true ならもう1周!

こうして、条件がfalse(=iが5以上)になるまでぐるぐる回ります。

この“回るルール”をつかむと、for文がぐっと身近になりますよ。

応用:カウントダウンもできる!

Java
for (int i = 5; i > 0; i--) {
    System.out.println("あと " + i + " 回!");
}

出力:

あと 5 回!
あと 4 回!
あと 3回!
あと 2 回!
あと 1 回!

i– とすればカウントダウンも可能!方向を変えるだけでできるのもfor文の強さです。

for文が向いている場面

  • 配列のインデックスを使って処理したいとき
  • 開始と終了条件を明確に設定したいとき
  • 何回ループしたかをカウントしたいとき

まとめ

通常のfor文は、最初は「呪文っぽくて難しそう」に見えますが、 中身の3ステップ(初期化・条件・更新)が理解できれば、自在にデータをループさせられる便利な文法です!

次の章では、この通常のfor文よりも「シンプルで読みやすい」拡張for文をご紹介します。

拡張for文(foreach)の使い方と特徴

通常のfor文にようやく慣れてきたころ、「拡張for文」という新キャラが登場してきて、「ちょ、待ってください!」ってなりませんでしたか?

私はなりました。 しかも、構文が全然違う。

コロン(:)がいきなり出てきて、もはやパニック。

けれど実はこれ、とっても便利なやさしい文法なんです。

拡張for文って何?

拡張for文は、「配列やコレクションの中身を1つずつ取り出して処理する」ための、よりシンプルな書き方です。

読み方は「foreach(フォーイーチ)」と呼ばれることもあります。

基本の構文

Java
for (型 変数名 : コレクションや配列) {
    // 1つずつ取り出された要素を使って処理
}

実例を見てみましょう

Java
String[] fruits = {"りんご", "バナナ", "みかん"};

for (String fruit : fruits) {
    System.out.println(fruit);
}

出力:

りんご
バナナ
みかん

やってることは「fruits配列の中身を1つずつ取り出して、fruitという変数に入れながら処理している」というイメージです。

通常のfor文とどう違うの?

たとえば、同じ処理を通常のfor文で書こうとするとこうなります:

Java
for (int i = 0; i < fruits.length; i++) {
    System.out.println(fruits[i]);
}

これも全然アリですが、「インデックス(i)を使わなくてもよいなら、もっとスッキリ書きたいよね?」という場面には拡張for文がピッタリです。

拡張for文のメリット

  • 読みやすく、短い
  • コレクションの中身をすべて処理するのに向いている
  • インデックスを気にしなくていいからミスが減る

逆に、こんなときは不向き

拡張for文にも弱点はあります。

以下のような場面では通常のfor文の方が適しています:

目的拡張forでできる?
要素の途中から始めたい❌(一律で先頭から)
インデックスが必要
要素を削除・追加したい ❌(ConcurrentModificationExceptionになることも)
単純に全件処理したいだけ⭕️

Listでも使ってみよう!

Java
List<String> names = List.of("Taro", "Hanako", "Jiro");

for (String name : names) {
    System.out.println("こんにちは、" + name + "さん!");
}

とてもスッキリ!慣れてくると、拡張for文を見て「あ〜はいはい、全件処理ね」とすぐに意味がわかるようになります。

まとめ

拡張for文は、「配列やListの中身を全部取り出して処理したい!」というときのお助けショートカットのような存在です。

見た目はちょっと違和感ありますが、使い方がわかれば「むしろ楽かも」と思えるはず。

次の章では、そんな通常for文と拡張for文の使い分けを整理して、どっちをいつ使えばいいの?という永遠のテーマに一緒に向き合ってみましょう。

通常forと拡張for、どう使い分けるのが正解?

Javaのfor文には2種類ある── それがわかったところで、次に出てくるのが「で、どっちをいつ使えばいいの?」という疑問です。

この章では、通常for文と拡張for文の違いや使いどころの目安をわかりやすく整理していきます!

ざっくりまとめると…

比較項目通常のfor文拡張for文(foreach)
書き方自由度高め(インデックス操作あり)短くて簡潔
配列の一部だけ処理できるできない(全件処理のみ)
添字(index)が必要必要に応じて使える使えない
要素の追加/削除可(ただし注意が必要)基本的に非推奨
可読性多少複雑になりがちスッキリして読みやすい

それぞれの得意な場面

通常のfor文が向いているケース

  • インデックス(i番目)を使いたい 例:奇数番目だけ取り出したい、末尾を判定したい など
  • 一部の要素だけを処理したい 例:途中でbreakしたい、3番目以降だけ処理したい
  • ループ中に要素を変更・削除したい(←要注意)
Java
for (int i = 0; i < items.length; i++) {
    if (i % 2 == 0) {
        System.out.println(items[i]); // 偶数番目だけ処理
    }
}

拡張for文が向いているケース

  • 単純にすべての要素を処理したいとき
  • 書くコードをスッキリさせたいとき
  • 要素の中身だけ使えばOKなとき
Java
for (String item : items) {
    System.out.println(item); // 全部出力するだけならこれでOK!
}

実務ではどうなの?

業務コードでは、シンプルな処理には拡張for文が多く使われます。

一方で、インデックスが必要な複雑な場面には通常forが登場します。

だから、「拡張forだけでいいじゃん!」というわけではなく、「状況に応じて使い分ける」というのが現実的なスタンスです。

最後にひとこと:迷ったらまずは拡張for文でOK!

学習の最初の段階では、「ループで全部回したいだけ」な場面が多いと思います。

そういうときは、まず拡張for文で書いてみて大丈夫です。

あとから「この処理、i番目が必要だな」となったら、通常のfor文に切り替えればOK!

次の章では、実際の業務コードでよく見かける「for文」の使われ方をピックアップして、 「これってどう読むの?」という疑問に答えていきます。

業務コードでよくあるループのパターンを読み解こう

「for文、なんとなくわかってきた!」と思った矢先、業務のコードを見ると、

Java
for (User user : userList) { ... }

…え?Userって何?

ていうかuserListはどこで作られてるの?

そして、このfor文何してるの?

わかります、私も最初はそうでした。

for文そのものというより、「業務でどう使われてるか」がわからない。

それが本当の壁でした。

ここでは、実務でよく見かけるループのパターンをいくつか紹介しながら、それぞれ何をしているのかを“言葉でかみ砕いて”解説していきます!

パターン①:一覧データを全件処理する

Java
for (Product p : productList) {
    System.out.println(p.getName());
}

何をしている?

→ 商品一覧(productList)の中身を1つずつ取り出して、商品名を表示しているだけです。

ポイント解説:

  • productList は List 型(Listの中にProduct型のデータが入ってる)
  • p が1つずつ取り出されたProduct型の変数
  • p.getName() で「商品名の文字列」を取得

つまり、商品一覧に「for-each」でぐるぐるしてるだけ!

パターン②:ループ内で条件分岐する

Java
for (User u : userList) {
    if (u.isActive()) {
        activeCount++;
    }
}

何をしている?

→ ユーザー一覧の中から「アクティブなユーザー」だけを数えている。

ポイント解説:

  • u.isActive() は「このユーザーは有効か?」を返すメソッド
  • 条件に合った人だけを数えてる=フィルター的な使い方
  • 集計や検索によく使われる定番パターン!

パターン③:ループの中でデータを生成・加工

Java
List<String> names = new ArrayList<>();
for (User u : userList) {
    names.add(u.getName());
}

何をしている?

→ User型のListから「名前だけ取り出したList」を新しく作っている。

これ、Stream APIのmapに進化する前の“原始的なmap処理”だったりします!

初心者が混乱しやすいポイント

つまずきポイント解説
List<User>って何型?「User型のデータを複数入れられる箱(List)」です
u.getName() の意味が不明Userという型が持っている「名前を返すメソッド」
for (User u : userList)の書き方に戸惑う拡張for文で1人ずつuに取り出しているだけです

最初のうちは「どこからどこまでが型で、どこが変数なの?」と見分けづらいですが、読み慣れてくると自然と見えてきます。焦らなくてOK!

補足:Stream APIで見かける未来バージョン

Java
List<String> names = userList.stream()
                             .filter(User::isActive)
                             .map(User::getName)
                             .toList();

この書き方も、やってることは「ループ+条件分岐+変換」です!

初心者のうちは「これってfor文でやってたやつの進化系か〜」くらいの認識で十分です。

まとめ:業務で使われるfor文の8割は“繰り返し+条件分岐”

for文を読み解く力は、業務コードを読む力そのものに直結します。

「なんか難しそう」と感じたら、

  • どんなListを回してる?
  • 何を取り出してる?
  • 中で何をしてる?

この3つの視点で一度止まって眺めてみてください。

そしてわからなければ、「これは全部“箱から中身を取り出して処理してる”だけ」と一度ざっくり解釈してみましょう。だいたい合ってます。

次の章では、初心者の方が陥りがちな「ループ処理の落とし穴」について紹介します。

「あれ、これ動かない!?」となる前に、一緒に回避ポイントを押さえておきましょう!

よくある初学者のつまずきと注意点

for文の仕組みがわかってきた…!と思った矢先に「なぜかエラーが出る」「思ったように動かない」という壁にぶつかるのが、誰しも通る道。

この章では、初心者がfor文でつまずきがちなポイントをまとめてご紹介します。

「あ、これ自分のことだ…」と思ったら、それは成長のチャンスです!

無限ループになってプログラムが止まらない!

Java
for (int i = 0; i >= 0; i++) {
    System.out.println(i);
}

何が起きてる?

  • 条件がi >= 0なので、0以上の間ずっとループが続きます。そしてiは増え続けるので、終了条件に永遠に到達しません。

対処法

  • 終了条件が正しく設定されているかを確認!
  • 「どこで終わるか?」をイメージして書く習慣を

インデックスの境界で「ArrayIndexOutOfBoundsException」

Java
String[] fruits = {"りんご", "バナナ", "みかん"};

for (int i = 0; i <= fruits.length; i++) {
    System.out.println(fruits[i]);
}

エラー発生

Index 3 out of bounds for length 3

なぜ?

  • fruits.length は3ですが、配列のインデックスは0〜2まで。i <= fruits.length と書くとi == 3でエラーになります。

正しくはこう書く!

Java
for (int i = 0; i < fruits.length; i++)

「=ではなく<」! ここ、初学者の永遠の落とし穴です。

for文の中でリストを変更してエラーに

Java
for (String item : items) {
    if (item.equals("削除対象")) {
        items.remove(item); // エラーの元!
    }
}

ConcurrentModificationExceptionが出ることも…

何が起きてる?

  • 拡張for文で回している最中にリストをいじると「おい、いま見てるリスト書き換えないでくれ!」と怒られます。

回避策

  • Iteratorを使うか、通常for文で対応する

条件が間違っていてループしない・しすぎる

例1:1回も回らない

Java
for (int i = 10; i < 5; i++) {
    System.out.println(i); // 実行されない
}

例2:条件がずれてて1回多く回る

Java
for (int i = 0; i <= 4; i++) {
    // 実は5回回ってる(i=0〜4)
}

「何回回すつもりか」について落ち着いて考えてみるといいですね。

拡張for文でindexを使いたくなる問題

Java
for (String item : items) {
    // itemが何番目か知りたい!
}

でも、拡張for文では“順番”はわからないのが特徴です。

indexが必要なら、素直に通常のfor文を使いましょう!

Java
for (int i = 0; i < items.size(); i++) {
    System.out.println(i + "番目: " + items.get(i));
}

最後に:つまずくのは“伸びしろ”の証拠

for文は基本にして奥深し。

どんなに簡単に見えても、「想定外の動き」を経験してこそ理解が深まります。

「失敗したけど次は気をつけよう」と思えたなら、それはもう立派なスキルアップです。

まとめ 〜for文がわかると、Javaがもっと楽しくなる!

ここまでお疲れさまでした! Javaのfor文をめぐる旅、いかがでしたか?

最初はややこしく見えた通常のfor文。

「なんでコロン使ってるの!?」と驚いた拡張for文。

業務コードで出くわしては「意味不明…」と目をそらしていたループたち。

でも、ひとつずつ分解して読み解いていくと、「あ、そういうことだったのか!」とスッと理解できる瞬間があったのではないでしょうか。

この記事では、次のことを一緒に学んできました。

  • 通常のfor文の基本構文と“3ステップ”の流れ
  • 拡張for文の読みやすさと便利さ
  • それぞれの使いどころと違い
  • 実務でよくあるコードのパターンとその意味
  • 初心者がつまずきやすいポイントとその回避法

知識として知るだけでなく、「自分が書くとき」「人のコードを読むとき」に役立つ実践的な力を、少しずつ蓄えてきました。

for文って、ただの文法のひとつかと思いきや、「ループという考え方」そのものがプログラミングの基礎なんですよね。

だから、ここがわかると、「配列やリスト」「条件分岐」「データ操作」など、いろんなトピックがつながって見えてきます。

まるで霧が晴れていくように、Javaの世界が広がっていく感覚。

それを、この記事で一緒に体験できていたらうれしいです!

decopon
decopon

私自身、Javaのfor文に出会ったとき、「よし、理解できたぞ!」と思ったのも束の間、突然現れた“拡張for文”にまた戸惑って…。そんなふうに、学習の途中で立ち止まってしまった経験がたくさんあります。

だからこの記事は、過去の自分に向けるつもりで書きました。 「何が違うの?」「どうやって使い分けるの?」そんなモヤモヤにやさしく寄り添えるように。 もしこの記事が、あなたの中の“わからない”をちょっとでもほぐす手助けになっていたなら、それ以上にうれしいことはありません。

コメント

タイトルとURLをコピーしました