Javaのwhile文が覚えられない、条件が難しい、無限ループで焦った…。そんな経験はありませんか?
実は私も最初、while文が“いつ止まるのか”わからず、ずっと同じ表示が繰り返されるのを見てパソコンが壊れたかと思いました。
この記事では、「while文の正しい書き方」「無限ループの原因」「forやdo-whileとの違い」「複雑な条件の整理法」などを、やさしく段階的に解説します。
「条件式が怖くなくなった」「ループの使い分けがスッキリ理解できた」と多くの初学者が安心した内容です。
お菓子をもらうまで「もう1個ちょうだい!」を繰り返すような、実生活に例えたシンプルな説明で、つまずきをゼロにします。
読み終えるころには、「while文は味方だ」と思えるようになっています。さっそく中身を見ていきましょう!
while文の書き方が覚えられない
while文は「条件がtrueの間だけ処理をくり返す」という、とてもシンプルな書き方です。一度覚えれば、どんな場面でも応用ができます。
覚えづらいと感じるのは、“くり返す条件”と“中カッコの使い方”に慣れていないからです。でも実は、構文の形はとても一定です。まずは基本形をしっかり理解することが、while文のマスターへの第一歩です。
まず、while文の基本の形はこうです:
while (条件) {
繰り返したい処理;
}
例えば、5回「こんにちは」と表示するコードは:
int i = 0;
while (i < 5) {
System.out.println("こんにちは");
i++;
}
ポイントは以下の3つ:
- 条件式(
i < 5
)がtrueなら中の処理が実行される i++
でカウントを進めることで、いつか条件がfalseになる(=終了)- 最初に
int i = 0;
のように変数を用意する必要がある
【よくある間違い】
i++
を忘れて条件がずっとtrue → 無限ループになるwhile i < 5
のようにカッコ()を忘れる → コンパイルエラー- 中カッコ
{}
を省略して意図しない処理までループしてしまう
【覚えるコツ】
for文の「ばらした形」として理解する
for (int i = 0; i < 5; i++) {
// 処理
}
は、実は while文でこう書けます:
int i = 0;
while (i < 5) {
// 処理
i++;
}
「条件 → 処理 → 更新」の流れを紙に書いて追いかけると理解が深まります
while文は「条件がtrueの間、くり返す」だけの超シンプルなしくみです。怖がらずに書いて動かしてみることが、理解への近道です!
繰り返しが止まらなくなる(無限ループ)の理由がわからない
無限ループは「終了条件が永遠に満たされないこと」で起こります。でも、原因と仕組みを理解していれば、防ぐのはカンタンです。
while文は「条件がtrueの間ずっと実行」されます。つまり、条件がずっとtrueのままだと止まりません。多くの人が i++
を忘れたり、条件式を間違えることで、この“終わらないループ”にハマってしまうのです。
以下のコードを見てみましょう。
int i = 0;
while (i < 5) {
System.out.println("iの値: " + i);
// i++ がない!
}
このコードでは、i
が0のままで増えないため、i < 5
はずっとtrueのままです。結果として、「iの値: 0」が無限に出力され続け、プログラムが止まりません。
【よくある無限ループの原因】
- 更新処理(i++など)を忘れる:最も多い原因です。
- 終了条件の不備:たとえば
i > 5
にすべきところをi < 5
と書いてしまうなど。 - 入力待ちが終わらない:ユーザー入力が無限に続く設計。
【対策と予防法】
- まずは「必ず終わる条件」になっているかを確認する
- ループの中で変数が“変化しているか”をチェックする
- テスト時は短い回数(3回など)にして確認する
- IDEの「強制停止」機能を活用する(例:Eclipse、IntelliJ)
- ループ中に
break;
を使って安全弁を用意する方法もある
int i = 0;
while (true) {
System.out.println(i);
if (i >= 10) break;
i++;
}
【補足:while(true) について】
実はこの書き方自体は悪ではなく、「条件を途中で判断する」ことで無限ループを制御する方法として、実務でもよく使われます。違いは「抜け道(breakなど)があるかどうか」です。
無限ループは、終了条件や変数の更新を忘れた“人為的ミス”で起こることがほとんどです。原因が分かれば、恐れる必要はありません!
for文との違いがあいまいで、どちらを使えばいいのか迷う
for文とwhile文の違いは、「繰り返しの回数が決まっているかどうか」です。回数が決まっているならfor文、決まっていないならwhile文を使うとスッキリします。
両方とも“繰り返し処理”に使う文法ですが、得意な場面が違います。for文は「何回くり返すか」が最初から分かっているときに便利で、while文は「条件が満たされるまで」何回繰り返すかわからない時に使います。
たとえば、九九の「2の段」を表示するなら、for文がぴったりです:
for (int i = 1; i <= 9; i++) {
System.out.println("2 × " + i + " = " + (2 * i));
}
このように「1から9まで、9回くり返す」という明確な回数があるなら、for文がスマートです。
一方、ユーザーが「yes」と入力するまで何度も聞き直すような場合は、while文の出番です:
Scanner scanner = new Scanner(System.in);
String input = "";
while (!input.equals("yes")) {
System.out.println("yesと入力してください:");
input = scanner.nextLine();
}
ここでは「yesと入力されるまで」という“条件ベース”の繰り返しです。こうした場合はwhile文のほうが直感的で適しています。
【判断ポイントまとめ】
- 「回数が決まっている」→ for文
- 「いつ終わるかわからない条件」→ while文
【おまけ:同じ処理をどちらでも書ける】 実は、多くの処理はfor文でもwhile文でも書けます。
// for文
for (int i = 0; i < 3; i++) {
System.out.println("Hello");
}
// while文
int i = 0;
while (i < 3) {
System.out.println("Hello");
i++;
}
だからこそ、「この繰り返しはforっぽいな」「これはwhileのほうが読みやすいな」と使い分けできると、コードがグッと読みやすくなります。
forとwhileの違いは“繰り返しの回数が決まっているかどうか”。それを意識するだけで、迷いなく選べるようになります!
do-while文との違いがわからない/どちらを使えばいいか迷う
do-while文は「少なくとも1回は処理を実行したいとき」に使います。while文との大きな違いは、「判定のタイミング」にあります。
while文は最初に条件をチェックしてから処理を実行しますが、do-while文はまず処理を実行してから、最後に条件をチェックします。そのため、条件が最初からfalseでも1回は処理されるのが大きなポイントです。
以下のコードを見てください。
int i = 0;
do {
System.out.println("iの値: " + i);
i++;
} while (i < 1);
この場合、i
は0なので i < 1
はtrueです。しかし仮に i = 5
のように初期値が条件を満たさなくても、最初の1回だけは必ず実行されます。
一方で、while文で同じように書くと:
int i = 5;
while (i < 1) {
System.out.println("iの値: " + i);
i++;
}
この場合、条件 i < 1
がfalseなので、中の処理は一度も実行されません。
【使い分けの目安】
- ユーザー入力など、「一度は必ず聞く」「1回は絶対にやる」場面 → do-while
- 条件を満たすかどうかで最初から実行するか判断したい → while
【実生活のたとえ】
- while文:お母さんに「宿題終わったらゲームしていいよ」と言われる → 先に確認してからやる
- do-while文:「まず1回だけゲームやらせて!」とお願いして、やったあとに「続けていいか」を聞く → 最初に1回やるのが確定
do-while文は「最低1回処理したいかどうか」が判断のカギ。最初の1回が確定しているなら、do-whileがベストです!
条件式が複雑になると正しく書けない
条件式が長くなっても、1つ1つに分けて考えれば簡単です。まずは「比べる」「つなぐ」「かっこで囲む」の3つをマスターしましょう。
多くの初心者は、複雑な条件式に「正しく書けるか不安」を感じます。でも実際には、単純な比較を組み合わせているだけなんです。
「数が大きいかどうか」「文字が一致しているか」など、小さな条件をAND(&&) や OR(||) でつなげているだけなので、考え方はシンプル。
例えば、次のような条件があったとします:
「年齢が18歳以上、かつ、チケットを持っている人だけ通していい」
これはコードにするとこうなります:
while (!(age >= 18 && hasTicket)) {
System.out.println("条件を満たしていません。年齢が18歳以上でチケットを持っている必要があります。");
// 入力を再取得するなどの処理を入れるとよい
break; // 無限ループ回避のための仮の抜け道
}
System.out.println("通っていいよ!");
age >= 18
:年齢が18歳以上か?hasTicket
:チケットを持っているか?(boolean)&&
:両方がtrueなら実行される
【補足:条件を整理する方法】
- まず小さい条件に分ける
- 年齢だけを見る
- チケットだけを見る
- 日本語で書いてからコードにする
- 「18歳以上、かつ、チケットを持っている」
- かっこでグループ分けする癖をつける
if ((a > 5 && b < 10) || c == 3) { // 実行 }
かっこを入れると、どの条件がまとまっているか見やすくなります。
【よくあるミス】
=
(代入)と==
(比較)を間違える → たとえばif (x = 3)
はエラー!- 条件をまとめすぎて読みづらくなる
- 優先順位を知らずに思わぬ結果に → まずは「かっこ」で明示すれば安心
条件式は“足し算のように組み立てる”ものです。慣れれば、むしろ「条件を書くのが楽しい!」と感じられるようになりますよ!
まとめ:while文が“使いこなせる武器”になるまで
Javaのwhile文は、最初こそ難しく感じるかもしれません。しかし、基本構文・ルール・注意点を段階的に押さえれば、誰でも使いこなせるようになります。
本記事で学んだことをふり返ると…
- 基本構文は「while (条件) { 処理 }」というシンプルな形
- 無限ループは「終了条件」や「更新忘れ」で起こるが、予防策は明確
- for文やdo-while文との違いも、“使いどころ”で判断できる
- 複雑な条件式は“分けて考える”だけで怖くなくなる
これらのポイントを押さえておけば、while文は「こわい存在」ではなく「強力な味方」に変わります。