「for文の書き方が覚えられない」「iって何?」「無限ループで止まらなくなった…」Java学習者なら一度は通る道です。
私も最初は、カッコの中が呪文のように見えて、意味が全然わかりませんでした。特に i++
を忘れてパソコンが止まりかけた時は、本気で焦りました。
この記事では、小学5年生でも理解できるように「for文とは何か」「なぜカウンタ変数が必要なのか」「無限ループをどう防ぐのか」などをPREP法で解説していきます。
「ずっと怖かったfor文が、初めて“味方”に感じられた」「配列の使い方まで一気に理解できた!」という声も多数。
繰り返し処理で「九九表」や「点数の合計」を出すような、実践的でイメージしやすい例を中心に紹介します。
この記事を読めば、あなたも今日から「for文マスター」になれます。さっそく読み進めてみましょう!
for文の構文ルールが覚えられない
for文は、「3つのパーツ(初期化・条件・更新)」でできていて、そのルールを理解すればカンタンに書けます。
for文の書き方が難しく感じるのは、for (初期化; 条件; 更新)
という書式が「何を意味しているのか」イメージできないからです。でも、それぞれの役割を分解して覚えれば、暗記に頼らず自然と書けるようになります。
九九の2の段を出力するコードで考えてみましょう:
for (int i = 1; i <= 9; i++) {
System.out.println("2 × " + i + " = " + (2 * i));
}
この1行に、3つの意味があります:
- int i = 1; → スタート地点(iという数を1から始める)
- i <= 9; → ゴールの条件(iが9以下の間、繰り返す)
- i++ → ステップ(1回ごとにiを1つ増やす)
この順番で繰り返されて、ループが動きます。1周ごとに System.out.println
が実行される、というわけです。
【よくある間違い】
- セミコロンの位置がズレて
for (int i = 1 i <= 9; i++)
と書いてしまう → エラー - 中カッコ
{}
を省略して1行だけ書く → 2行以上書くときにバグになりやすい ;
を最後に付けてしまう →for (...) ; {}
のように実行されないループになる
for文は、「スタート」「条件」「ステップ」の3つの流れを頭の中で再現できれば、正しく書けるようになります!
カウンタ変数(iなど)やその使い道がイメージできない
カウンタ変数は、「何回目のループか」「何番目のデータか」を数えるための“しるし”です。
for文では同じ処理を何度も繰り返しますが、「今が何回目なのか」「何番目のデータを扱っているか」が分からないと、意味のある繰り返しができません。そこで使うのが「カウンタ変数(たいていはi)」です。
例えば、生徒5人の名前を順番に表示するには、配列とfor文を使って次のように書きます:
String[] names = {"たろう", "はなこ", "けんじ", "さくら", "ゆうた"};
for (int i = 0; i < names.length; i++) {
System.out.println((i + 1) + "人目: " + names[i]);
}
この中で i
は0から始まり、1回ループするたびに1ずつ増えます。これが「カウンタ」です。
i = 0
→ names[0](たろう)を表示i = 1
→ names[1](はなこ)を表示- …
というように、iの値が「今どのデータを使っているか」のヒントになります。
【カウンタ変数の使いどころ】
- 配列やリストの添字として(例:
scores[i]
) - 合計や平均を出すときに何人目かを示す
- 偶数回/奇数回だけ実行するなどの条件に使う
【カウンタ変数の名前】
- 基本は
i
でOKですが、複雑な入れ子構造のときはj
,k
などを使います。 - 意味を持たせたいときは
index
やcount
などの名前にしてもよいです。
「i」はfor文の中で今“何周目”かを示す、とても大切なカギです。データの順番や数を扱うときに、なくてはならない存在です!
配列やリストと一緒に使うfor文(拡張for含む)の使い分けができない
配列やリストには「普通のfor文」も「拡張for文」も使えますが、用途に合わせて使い分けるのがコツです。
普通のfor文は「添え字(index)」を使って順番を指定できます。一方、拡張for文は「順番に全部処理する」ことに特化しています。どちらも便利ですが、目的に応じて選ばないと、逆にコードが読みづらくなることもあります。
生徒の点数を表示するコードを見てみましょう。
【普通のfor文(添字でアクセス)】
int[] scores = {80, 90, 75, 60};
for (int i = 0; i < scores.length; i++) {
System.out.println((i + 1) + "人目の点数: " + scores[i]);
}
このコードでは、誰の点数かを i
を使って明示できます。
【拡張for文(全員を自動で処理)】
for (int score : scores) {
System.out.println("点数: " + score);
}
この場合、「何人目か」はわからないけれど、とにかく全部の点数を表示できます。
【使い分けのポイント】
- 番号や順番を使いたい → 普通のfor文
- 要素の中身だけ使いたい → 拡張for文
【注意点】
- 拡張for文では、ループの中で「元の配列の要素を変更する」ことはできません(要素の値は変更できない)
- リスト(ArrayListなど)も同様に拡張forが使えますが、同じ制限があります
「どのfor文を使えば一番読みやすいか?」を意識することで、コードの見通しが良くなり、バグも減ります!
無限ループになって止まらなくなった経験があり、怖くて使えない
無限ループの原因を理解し、正しく条件を書くことで、for文は安心して使えるツールになります。
無限ループが起きるのは、終了条件が永遠に満たされないときです。たとえば、ループ変数を増やし忘れたり、条件がずっとtrueのままだったりすることで、for文が止まらなくなります。
次のコードを見てみましょう。
for (int i = 0; i < 10; ) {
System.out.println("i: " + i);
}
これは「iを増やしていない」ため、i < 10
がずっとtrueのままになり、ずっと i: 0
が出力され続けます。
【よくある無限ループのパターン】
i++
を書き忘れて、ループが永遠に続く- 条件式が間違っていて、常にtrueになっている(例:
i > 10
など) break
で止めるつもりだったが、条件が発生しない
【無限ループを防ぐためのポイント】
- まず「必ず終わる」条件を確認する
i++
などの更新処理を忘れない- デバッグ時は
System.out.println
でループ回数を確認する - 一時的に
break;
を入れて強制停止も可能
【安全にテストする方法】
- 開発中は条件を「i < 3」など、短い回数にして動きを確認する
- EclipseやIntelliJのようなIDEでは、無限ループ時に強制停止ボタンがある
for文の無限ループは「理由がある」現象です。正しい更新と終了条件さえあれば、むしろとても安全なツールです!
forとwhileの違いや使い分けができない
or文とwhile文の違いは「繰り返し回数が決まっているかどうか」です。状況に応じて使い分けることで、コードはもっと読みやすくなります。
for文は「何回繰り返すか」が最初から分かっているときに使います。一方、while文は「いつ終わるか分からないけど、ある条件が満たされるまで繰り返したい」ときに使います。
たとえば、九九のように「9回繰り返す」ならfor文が適しています:
for (int i = 1; i <= 9; i++) {
System.out.println("2 × " + i + " = " + (2 * i));
}
一方、ユーザーが「正解」と入力するまで繰り返したい場合はwhile文が向いています:
Scanner scanner = new Scanner(System.in);
String answer = "";
while (!answer.equals("正解")) {
System.out.print("答えを入力してください: ");
answer = scanner.nextLine();
}
System.out.println("正解です!");
【使い分けの目安】
- 回数が決まっている:for文
- 条件によって止めたい:while文
【補足:do-while文とは?】 do-while文は「最低1回は処理を実行したい」ときに使います:
int count = 0;
do {
System.out.println("カウント: " + count);
count++;
} while (count < 3);
「何回か」を先に決められるならfor文、「いつ終わるかわからないけど条件次第」ならwhile文。これを覚えるだけで、迷わず選べます!
まとめ
for文は初心者が最初につまずきやすい関門ですが、ポイントをおさえて順番に学べば必ず理解できます。
- 構文は3つの要素(初期化・条件・更新)でできている
- カウンタ変数は「今何回目か」を示す目印
- 配列を使うときは普通のfor文か拡張for文を目的に応じて選ぶ
- 無限ループは必ず原因があるので冷静に対処できる
- for文とwhile文の違いを理解すれば、正しく使い分けられる
for文は「繰り返し」を理解するうえでとても大切な考え方です。このページの内容を何度も読み返して、手を動かして試していけば、必ず習得できます。
「なんとなく怖い」を「頼れる味方」に変えていきましょう!