while文の基本構造と役割
while文は、繰り返し処理を行うための基本的な構文です。
もっとくわしい言い方をすると、「条件が成り立っている間、ずっと同じ処理を繰り返す」というのがwhile文の役割です。
例えば、「カウンターが10になるまで数え続ける」とか「ユーザーが正しい入力をするまで何度も聞き直す」といった処理を実現できます。
プログラミングでは、このように同じ処理を何度も繰り返したい場面がたくさんあります。while文を使えば、こうした繰り返しを自動的に実行できるようになるのです。
while文の基本構文と実行の流れ
while文は「条件がtrueの間、処理を繰り返す」という仕組みで動作します。基本的な構文は、次のような形です。
まず最初に条件式をチェックして、結果がtrueなら中括弧{}の中の処理を実行します。
処理が終わると、また条件式をチェックして、まだtrueであれば再び処理を実行します。この流れを、条件がfalseになるまで繰り返します。
実際のコード例を見てみましょう。
出力結果
ネコが1匹います
ネコが2匹います
ネコが3匹いますcountという変数が1から始まって、3以下の間は処理を繰り返すというプログラムです。
count++で毎回1ずつ増やしていき、4になった時点で条件が成り立たなくなるため、そこでループが終了します。
条件式の評価
while文の条件式には、boolean型の値(trueかfalse)を使います。
その際、次のような演算子を使って条件を作ります。
- 比較演算子(==、!=、<、>など):値の大小や等しさを判定する
- 論理演算子(&&、||、!):複数の条件を組み合わせる
条件がtrueの間は処理が続き、falseになった瞬間にループから抜け出します。
出力結果
イヌの数: 5
イヌの数: 4
イヌの数: 3
イヌの数: 2
イヌの数: 1このプログラムでは、number > 0という条件式を使っています。
numberが5から始まり、number--で1ずつ減らしていますね。
numberが0になると条件が成り立たなくなるため、ループが終了します。
while文とif文の違い
if文とwhile文には大きな違いがあります。
if文は「もし〜なら」という条件判定を1回だけ行います。一方、while文は「〜の間は」という条件が成り立つ限り、何度も繰り返し処理を実行します。
出力結果
ウサギがいます
ウサギが2匹
ウサギが1匹1回だけ判定するのがif文で、複数回判定するのがwhile文だということを覚えておきましょう。
while文の使い方と実践例
ここでは、while文がよく使われるパターンから注意すべきポイントまで、具体的なコード例を通して解説します。
実際のプログラミングでwhile文をどう活用するか、イメージをつかんでいきましょう。
基本的なwhile文の例
最もよく使われるのが、カウンター変数を使った繰り返し処理です。
「変数を初期化する」→「条件を設定する」→「変数を更新する」
という3つのステップを組み合わせることで、指定した回数だけ処理を実行できます。
実際のコードを見てみましょう。
出力結果
1番目のハムスター
2番目のハムスター
3番目のハムスター
4番目のハムスター
5番目のハムスター3つのステップの該当箇所は次の通りです。
- 変数を初期化する: int counter = 1; でループ開始前に初期値を用意する
- 条件を設定する: while (counter <= 5) で繰り返しを続ける条件を指定する
- 変数を更新する: counter++; でループ内で変数を変化させる
この構造を覚えておきましょう。
無限ループ(infinite loop)の例と注意点
while(true)のように条件を書くと、無限に繰り返すループを作ることができます。どこで使うのかというと、サーバープログラムやゲームのメインループなど、意図的な無限ループが必要な場面です。
ただし、終了条件をきちんと設けないと、プログラムが止まらなくなってしまう危険性があります。break文やreturn文で適切にループから抜け出す仕組みを作ることが大切です。
出力結果
リスがエサを食べています
リスがエサを食べています
リスがエサを食べています
エサがなくなりましたwhile(true)で無限ループを作っていますが、foodCountが0以下になったらbreak文でループから抜け出すような形にしています。
もし、ループから抜け出すことができない無限ループが起きると、プログラムが永遠に停止せず、CPUやメモリを使い続けてしまいます。その結果、アプリケーションがフリーズしたり、システム全体の動作が重くなる原因となります。
そのような事態を防ぐため、無限ループを使う場合は必ず終了条件を設けるようにしましょう。
複数条件を扱うwhile文の書き方
実際のプログラムでは、1つだけでなく複数の条件を組み合わせてループを制御することがよくあります。そんなとき、論理演算子を使えば複雑な条件も簡潔に表現できます。
ここでは、AND演算子やOR演算子を使った条件の組み合わせ方や、コードを読みやすく保つためのコツを解説します。
AND条件(&&)を用いた繰り返し
複数の条件がすべて成り立っている場合だけ処理を続けたいときは、&&演算子を使います。
&&は「かつ」という意味で、左側も右側も両方trueでなければ、全体がfalseになります。
より厳密な制御ができるため、「AかつB」という条件が必要な場面で活躍します。
実際のコード例を見てみましょう。
出力結果
1日目: トリの元気度5
2日目: トリの元気度4
3日目: トリの元気度3「日数が3日以内」かつ「元気度が0より大きい」という2つの条件を両方満たす間だけループが続きます。どちらか一方でも成り立たなくなった時点で、ループが終了します。
OR条件(||)を用いた繰り返し
どちらか一方の条件でも成り立っていればループを続けたい場合は、||演算子を使います。
||は「または」という意味で、左側か右側のどちらか一方でもtrueなら、全体がtrueになります。
より柔軟な制御ができるため、「AまたはB」という条件が必要な場面で便利です。
実際のコード例を見てみましょう。
出力結果
時間1: ネコが遊んでいます
時間2: ネコが遊んでいます
時間3: ネコが遊んでいます「時間が3未満」または「ネコが活動中」のどちらか一方でも成り立つ間はループが続きます。
両方の条件がどちらもfalseになって初めて、ループが終了します。
条件式の複雑化を避けるための工夫
条件が多くなりすぎると、コードが読みにくくなってしまいます。
このような場合は、条件判定を別のメソッドに切り出したり、boolean型の変数を使って条件を整理したりする方法が効果的です。コードの可読性が向上し、バグを見つけやすくなり、メンテナンスも楽になります。
出力結果
ウサギにニンジンをあげています
ウサギにニンジンをあげていますもし、条件式をそのまま書こうとすると、次のような形になってしまうでしょう。
このコード例では、複数の条件(&&で繋がれた長い式)をcanContinueFeedingというわかりやすい名前のメソッドにまとめているのです。これによって「餌やりを続けられるか?」という意図が一目でわかるようになり、コードが読みやすくなっています。
break・continue・returnによるループ制御
while文の中で処理の流れをより細かく制御したいときは、break、continue、returnといったキーワードが役立ちます。
こういったキーワードを使いこなすことで、条件式だけでは表現しにくい複雑なループ制御ができるようになります。
それぞれの働きと使い分け方を見ていきましょう。
breakによるループの終了
break文を使うと、条件に関係なく強制的にループを終了できます。
「ある状況になったら、その時点で処理を止めたい」という場合に便利です。通常の条件式では表現しにくい終了条件がある場合に、breakが活躍します。
実際のコード例を見てみましょう。
出力結果
ヒツジ1匹目
ヒツジ2匹目
ヒツジ3匹目
ヒツジ4匹目
ヒツジが5匹になりましたこのプログラムでは、本来は10回繰り返す予定でしたが、sheepCountが5になった時点でbreak文によってループが終了します。条件式のsheepCount < 10に関係なく、強制的に抜け出せるのがbreakの特徴です。
continueによる特定処理のスキップ
continue文は、今回の繰り返しだけをスキップして、次の繰り返しに進みます。
「特定の条件のときだけ処理を飛ばしたい」という場合に使います。ループ自体は継続されるため、breakとは動作が異なります。特定のデータだけを除外して処理したいときに便利です。
実際のコード例を見てみましょう。
出力結果
ブタ1番が鳴いています
ブタ2番が鳴いています
ブタ4番が鳴いています
ブタ5番が鳴いていますpigNumberが3のときだけcontinueによって処理がスキップされているのが確認できますね。
3番目のブタの出力だけが表示されず、ループは5回目まで続きます。
returnとの違いと使い分け
breakやcontinueはループだけに影響する命令ですが、returnはメソッド自体を終了させる命令です。
ループの途中でreturnを使うと、ループを抜けるだけでなく、そのメソッド全体の処理が終わります。ループだけを抜けたいならbreak、メソッドごと終了したいならreturnを使いましょう。
出力結果
ウシ1頭目を確認
ウシ2頭目を確認
ウシの確認を終了しますこのコード例の大まかな流れを確認しておきましょう。
- cowCountが1になり、「ウシ1頭目を確認」と表示
- cowCountが2になり、「ウシ2頭目を確認」と表示
- cowCountが3になり、if文の条件に合致
- 「ウシの確認を終了します」と表示後、returnでメソッド全体が終了
returnが実行された時点でcheckAnimalsメソッドが完全に終了するため、残りのループ(4頭目、5頭目)は実行されません。
ネストしたwhile文における制御構造の注意点
while文を二重、三重に重ねた入れ子構造(ネスト)では、breakやcontinueは一番内側のループだけに適用されます。外側のループまで抜けたい場合は、ラベルという目印をつけるか、boolean型の変数でフラグを立てる方法があります。
ネストしたループでは「今どの階層にいるのか」を意識することが、思わぬバグを防ぐポイントです。
出力結果
ウマ1-1
グループ1の確認を中断
ウマ2-1
グループ2の確認を中断流れを1つずつ確認していきます。
horseGroup = 1 のとき
- horseInGroupが1になり、「ウマ1-1」と表示
- horseInGroupが2になり、if文の条件に合致
- 「グループ1の確認を中断」と表示後、breakで内側のループだけ終了
- 外側のループに戻り、horseGroupが2に増える
horseGroup = 2 のとき
- horseInGroupが1になり、「ウマ2-1」と表示
- horseInGroupが2になり、if文の条件に合致
- 「グループ2の確認を中断」と表示後、breakで内側のループ終了
- horseGroupが3になり、外側のループの条件(<= 2)を満たさず全体終了
ポイントは、breakが内側のループしか抜けないため、外側のループは通常通り続くことです。
do-while文との違いと使い分け
while文と似た構文に、do-while文があります。
違いを理解して適切に使い分けることで、より効果的なプログラムが作ることができます。どんな場面でどちらを選ぶべきか、具体例とともに見ていきましょう。
do-while文の基本構文
do-while文は、必ず一度は処理を実行してから条件を判定します。while文が「条件を先にチェックしてから処理を実行する」のに対し、do-while文は「処理を実行してから条件をチェックする」という順番になります。条件に関係なく最低でも1回は処理が実行されるという点がdo-while文の特徴です。
do-while文の基本的な書き方は次の通りです。
実際のコード例を見てみましょう。
出力結果
アヒルが0羽泳いでいます
アヒルが1羽泳いでいます
アヒルが2羽泳いでいます最初にduckCountが0であっても、do-while文なので必ず一度は処理が実行されます。
処理が終わった後に条件をチェックし、条件が成り立つ間は繰り返します。
while文との実行順序の違い
while文とdo-while文の最も大きな違いは、「条件チェックのタイミング」です。while文は最初に条件を評価してから処理を実行するため、条件が最初からfalseの場合は一度も実行されません。一方、do-while文は処理を実行してから条件を評価するため、条件が最初からfalseでも必ず一度は実行されます。
この違いを確認してみましょう。
出力結果
ライオンが動いていますwhile文とdo-while文の挙動の違いが確認できると思います。
whileとdo-whileの使い分け例
ユーザーからの入力を受け取る場面や、メニュー選択など、「最低一回は処理を実行したい」場合にdo-while文が適しています。
一方、「条件が成り立っている間だけ処理したい」場合はwhile文を選択します。適切な使い分けによって、プログラムの意図がより明確になります。
実際のコード例を見てみましょう。
このプログラムでは、メニューを必ず一度は表示したいので、do-while文を使っています。ユーザーが3を選択するまで、繰り返しメニューが表示されます。
このように、「少なくとも一回は実行する必要がある」場面では、do-while文が最適です。
よくある質問(Q&A)
Q: while文で無限ループになってしまいます
A: 条件式がfalseにならないことが原因です。ループ内で条件に関連する変数を適切に更新しているか確認してください。デバッグ時は変数の値を出力して動作を確認しましょう。
Q: while文内でbreakを使うタイミングは?
A: 特定の条件が満たされた時点で即座にループを終了したい場合に使います。通常の条件式では表現しにくい複雑な終了条件がある場合に効果的です。
Q: for文とwhile文はどう使い分けるべき?
A: 繰り返し回数が決まっている場合はfor文、条件によって回数が変わる場合はwhile文を選ぶのが一般的です。配列の操作にはfor文、ユーザー入力の待機にはwhile文が適しています。
Q: continue文を使うメリットは何ですか?
A: 特定の条件でのみ処理をスキップできるため、if文でブロック全体を囲む必要がなくなります。コードの可読性向上とネストの削減に効果的です。
Q: while文の条件式が複雑になった場合の対処法は?
A: 条件判定を別メソッドに切り出したり、boolean型の変数を使って条件をわかりやすく表現したりする方法があります。可読性を優先してコードを整理することが大切です。
まとめ
この記事では、Javaのwhile文について、基本的な構文から実践的な活用方法まで解説しました。
while文は、条件が成り立っている間、処理を繰り返し実行する制御構文です。プログラミングにおいて繰り返し処理は欠かせません。
while文の活用場面について、確認しておきましょう。
while文が活躍する場面
- 指定した回数だけ処理を繰り返したいとき
- 条件が成り立っている間、継続的に処理を実行したいとき
- ユーザー入力を受け取り、ある条件まで繰り返し処理したいとき
- 複数の条件を組み合わせて、柔軟なループ制御を行いたいとき
while文を使う上で押さえておきたいポイントは、次の通りです。
重要なポイント
- while文の基本構文と実行フロー
- break・continue・returnの挙動とその違い
- do-while文との違いと適切な使い分け
- 複数条件を扱う場合の論理演算子の使い方
- 無限ループに注意し、適切な終了条件を設定すること
while文をマスターすると、繰り返し処理が必要なプログラムを効率的に作成できるようになります。
条件式の設計から制御フローの管理まで、段階的に理解を深めていくことで、繰り返し処理が必要なプログラムを効率的に作成できるようになります。これは実際の開発で非常に重要なスキルです。
ぜひ、この記事で紹介した基本的な使い方と実用例を参考に、実際にコードを書いてみてください。