この記事では、Javaのwhile文の基本的な構文から、よく比較されるfor文との違い、そして実践的な使い方まで、豊富なサンプルコードを交えて分かりやすく説明します。
この記事を読み終える頃には、while文への苦手意識がなくなり、自信を持ってコードが書けるようになっているでしょう。
この記事で学べること
- Javaにおけるwhile文の基本的な書き方
- for文との明確な違いと使い分ける方法
- 無限ループの原因と正しい対処法
- break文やcontinue文を使った応用的なループ制御
- while文を使った実践的なサンプルプログラム
Javaのwhile文ってそもそも何?
ここでは、プログラミングにおける繰り返し処理の重要性と、Javaのwhile文がどのような仕組みで動くのか、その基本的な考え方を解説します。
- 繰り返し処理がないとどうなる?
- while文の基本的な考え方
繰り返し処理がないとどうなる?
もし、プログラミングに繰り返し処理がなかったらどうなるでしょうか。
例えば、画面に「こんにちは」と100回表示したい場合、
`System.out.println("こんにちは");`
というコードを100行も書かなければならなくなります。
これは非常に非効率ですし、後から修正するのも大変です。
繰り返し処理は、このような同じ、あるいは似たような処理を効率的に実行するために不可欠な仕組みなのです。
while文の基本的な考え方
Javaのwhile文は、繰り返し処理を実現するための命令の一つです。
その考え方は非常にシンプルで、ある条件を満たしている間だけ、特定の処理を何度も実行するというものです。
イメージとしては、スマートフォンに「バッテリー残量が20%より多い間は、動画を再生し続ける」と命令するようなものです。
バッテリー残量が20%以下になった瞬間に、動画の再生はストップします。
この「バッテリー残量が20%より多い間」がwhile文の条件にあたります。
Javaのwhile文の書き方
ここでは、Javaのwhile文を記述するための具体的なルール(構文)と、プログラムがどのような順序で実行されるのかを図解で見ていきましょう。
- 構文はとってもシンプル
- 処理の流れを見てみよう
- ループを構成する3つの重要要素
構文はとってもシンプル
Javaのwhile文の構文は、以下のように記述します。
とても覚えやすい形をしていますね。
while (条件式) { // 条件式がtrueの間、繰り返し実行される処理 }
`while`の後の丸括弧 `()` の中に条件式を書きます。
そして、波括弧 `{}` の中に、繰り返したい処理を記述します。
プログラムは、この条件式が`true`(真)である限り、波括弧の中の処理を何度も実行し続けます。
処理の流れを見てみよう
while文の処理の流れを確認してみましょう。
[ スタート ] ↓ ┌─→[ 条件式をチェック ]─(true)─→[ 繰り返し処理を実行 ]─┐ │ ↓ (false) │ │ [ ループ終了 ] │ │ ↓ │ └───────────────┘
このように、まず条件式が評価され、`true`であれば処理が実行されます。
処理が終わると、再び条件式の評価に戻るのがポイントです。
そして、条件式が`false`(偽)になった時点で、ループから抜け出して次の処理へ進みます。
ループを構成する3つの重要要素
意図した通りにwhileループを動かすには、以下の3つの要素が欠かせません。
- 初期化
- ループの条件に使う変数を、ループ開始前に準備すること。
- 条件式
- ループを続ける条件を`while()`の中に正しく記述すること。
- 更新処理
- ループ内の処理で、いつかループが終わるように変数の値を変更すること。
特に3番目の更新処理を忘れると、無限ループの原因になるため注意が必要です。
まずは動かそう!Javaのwhile文を使ったサンプルコード
理論を学んだら、次は実際にコードを動かしてみるのが一番です。ここでは、コンソールに1から5までの数字を順番に表示する、簡単なプログラムを作成します。
- 1から5まで数えるプログラム
- コードを1行ずつ読み解いてみよう
1から5まで数えるプログラム
以下のコードは、変数 `i` の値が5以下の間、その値を表示し、表示後に値を1ずつ増やす処理を繰り返します。
public class WhileExample { public static void main(String[] args) { // 1. ループ制御用の変数を初期化 int i = 1; // 2. 変数iが5以下の間、ループを続ける while (i <= 5) { // 変数iの値をコンソールに出力 System.out.println(i); // 3. 変数iの値を1増やす(更新処理) i++; } } }
実行結果
1 2 3 4 5
コードを1行ずつ読み解いてみよう
先ほどのコードがどのように動いているのか、一つずつ見ていきましょう。
- `int i = 1;`
カウンターとして使う変数`i`を準備し、初期値として`1`を設定しています(初期化)。 - `while (i <= 5)`
`i`の値が`5`以下の間はループを続ける、という条件式です。最初は`i`が1なので条件は`true`となり、ループ内の処理が始まります。 - `System.out.println(i);`
現在の`i`の値を画面に表示します。 - `i++;`
`i`の値を1増やします(更新処理)。`i++`は`i = i + 1`と同じ意味です。この行がないと、`i`の値が永遠に1のままとなり、無限ループに陥ります。
`i`の値が`6`になった瞬間に、条件式 `i <= 5` が`false`となり、ループが終了します。
Javaのwhile文とfor文、どっちを使うべき?
Javaの繰り返し処理には、while文の他にfor文もあります。ここでは、両者の違いを明確にし、どのような場面でどちらを使うべきかの判断基準を説明します。
- 2つのループ文の決定的な違い
- コードで比較!while文 vs for文
- 【シーン別】while文とfor文の使い分け
2つのループ文の決定的な違い
while文とfor文の最も大きな違いは、繰り返す回数が事前に決まっているかどうかにあります。
それぞれの得意な処理を理解しておきましょう。
ループ文 | 得意な処理 |
---|---|
for文 | 「10回繰り返す」「配列の要素数だけ繰り返す」など、回数が明確な繰り返し |
while文 | 「ユーザーが特定の文字を入力するまで」「ファイルが終了するまで」など、回数が不明確な繰り返し |
コードで比較!while文 vs for文
先ほど作成した「1から5まで数えるプログラム」を、for文で書くと以下のようになります。
// for文を使った場合 for (int i = 1; i <= 5; i++) { System.out.println(i); }
for文は、`for()`の中に「初期化」「条件式」「更新処理」の3つをまとめて記述できるため、繰り返しの回数が決まっている場合は、コードがスッキリとまとまる利点があります。
【シーン別】while文とfor文の使い分け
どちらを使うべきか迷ったときは、以下の基準で考えてみてください。
- for文が適しているケース
- 配列やリストの全要素を処理したい
- 指定した回数だけ処理を繰り返したい
- while文が適しているケース
- ユーザーからの入力内容に応じてループを終了させたい
- 何らかの処理が成功するまで繰り返したい
- ファイルの読み込みなど、データの終端が明確でない処理
Javaのwhile文でできること
ここでは、Javaのwhile文が実際のプログラムでどのように活用されるのか、具体的な7つのサンプルコードを通じて紹介します。自分の手でコードを打ち込み、動きを確認してみてください。
- 1. ユーザーからの入力を待ち受ける
- 2. 配列やリストの要素をすべて処理する
- 3. 簡単な数当てゲームを作る
- 4. ファイルの終わりまで一行ずつ読み込む
- 5. 条件を満たすまでランダムな値を生成する
- 6. ユーザーにメニューを選択させる
- 7. データの合計値が目標を超えるまで計算する
1. ユーザーからの入力を待ち受ける
`"exit"`と入力されるまで、ユーザーが入力した文字列を表示し続けるプログラムです。
import java.util.Scanner; public class InputLoop { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = ""; // "exit"が入力されるまでループ while (!input.equals("exit")) { System.out.print("何か入力してください(終了はexit): "); input = scanner.nextLine(); System.out.println("入力された文字: " + input); } System.out.println("プログラムを終了します。"); scanner.close(); } }
このように、終了条件がユーザーの行動に依存する場合は、while文が非常に有効です。
2. 配列やリストの要素をすべて処理する
配列の要素をインデックス(添字)を使って先頭から順番に処理します。これはfor文でも書けますが、while文の練習として見てみましょう。
public class ArrayLoop { public static void main(String[] args) { String[] fruits = {"りんご", "ばなな", "みかん"}; int index = 0; // インデックスが配列の長さ未満の間ループ while (index < fruits.length) { System.out.println(fruits[index]); index++; } } }
`fruits.length`で配列の要素数を取得し、それがループの終了条件になっています。
3. 簡単な数当てゲームを作る
プログラムが生成した1から100までの乱数を、ユーザーが当てるまで入力を促し続けるゲームです。
import java.util.Scanner; import java.util.Random; public class GuessingGame { public static void main(String[] args) { Random random = new Random(); int answer = random.nextInt(100) + 1; // 1から100までの乱数 int guess = 0; Scanner scanner = new Scanner(System.in); // 答えと入力が一致するまでループ while (guess != answer) { System.out.print("1から100の数字を当ててください: "); guess = scanner.nextInt(); if (guess > answer) { System.out.println("もっと小さい数字です。"); } else if (guess < answer) { System.out.println("もっと大きい数字です。"); } } System.out.println("正解です!"); scanner.close(); } }
何回で正解するか分からないため、このようなゲームの実装にはwhile文が最適です。
※その他のサンプルコード(4〜7)は、実際の記事では同様の形式で具体的なコードと解説を記述します。
要注意!Javaのwhile文と無限ループ
while文を使う上で最も注意したいのが「無限ループ」です。ここでは、無限ループがなぜ発生するのか、そしてもし陥ってしまった場合の対処法を解説します。
- 無限ループが発生する仕組み
- 無限ループに陥るコードの例
- 無限ループの止め方と予防策
無限ループが発生する仕組み
無限ループとは、その名の通り、ループが永遠に終了しなくなる状態のことです。
これは、while文の条件式が常に`true`と評価されてしまう場合に発生します。主な原因は以下の2つです。
- 条件式そのものが常に`true`である(例: `while(true)`)
- ループ内の処理で、条件式を`false`にするための更新処理が抜けている
無限ループに陥るコードの例
以下のコードは、先ほどのサンプルコードから更新処理 `i++;` を削除したものです。
// 無限ループの例 int i = 1; while (i <= 5) { System.out.println(i); // 更新処理を忘れている! }
このコードを実行すると、変数`i`の値がずっと`1`のままであり、条件式 `i <= 5` が常に`true`になるため、コンソールには延々と`1`が表示され続けます。
無限ループの予防策
while文を書くときは、必ずループを終了させるための更新処理が含まれているかを確認する癖をつけましょう。
「この変数がどうなったら、このループは終わるのか?」を常に意識することが大切です。
無限ループの止め方と予防策
もしプログラムが無限ループに陥ってしまったら、慌てる必要はありません。
EclipseやIntelliJ IDEAのような統合開発環境(IDE)で実行している場合は、コンソール画面にある赤い四角の停止ボタンを押せば、プログラムを強制終了できます。
予防策としては、先述の通り更新処理を忘れないことが第一です。また、意図的に無限ループ(`while(true)`)を作る場合は、後述する`break`文を使って必ずループを抜ける処理を記述する必要があります。
while文とセットで覚えたいJavaの便利構文
while文の理解が深まったら、次に関連する便利な構文も覚えておくと表現の幅が広がります。ここでは、do-while文、break文、continue文の3つを紹介します。
- とりあえず1回は実行する「do-while文」
- ループを強制的に抜ける「break文」
- 今回の処理だけスキップする「continue文」
とりあえず1回は実行する「do-while文」
do-while文は、while文と似ていますが、条件式の判定を処理の後に行うという特徴があります。
そのため、条件式の結果に関わらず、ループ内の処理が最低1回は必ず実行されます。
do { // 繰り返し実行される処理 } while (条件式);
ユーザーに一度メニューを表示してから入力を促すような処理で役立ちます。
ループを強制的に抜ける「break文」
`break`文は、ループの条件式の結果を待たずに、その場でループを強制的に終了させるために使います。
int i = 1; while (true) { // 意図的な無限ループ System.out.println(i); if (i == 3) { System.out.println("3になったのでループを抜けます。"); break; // ループを終了 } i++; } // 実行結果は 1, 2, 3 と表示される
特定の値を見つけたら処理を終えたい場合などに便利です。
今回の処理だけスキップする「continue文」
`continue`文は、ループを終了させるのではなく、現在の回の処理だけを中断して、次の回の処理の先頭にジャンプするために使います。
for (int i = 1; i <= 5; i++) { if (i == 3) { continue; // 3の時だけ処理をスキップ } System.out.println(i); } // 実行結果は 1, 2, 4, 5 と表示され、3がスキップされる
特定の条件の時だけ処理を実行したくない、という場合に役立ちます。
Javaのwhile文をもっと深く学ぶためのおすすめリソース
この記事で基礎は掴めたはずです。さらに知識を深めたい場合は、信頼できる情報源で学習を続けることが重要です。
まずは、Javaの公式ドキュメントにあたることをお勧めします。
情報が最も正確であり、最新の仕様を確認できます。
また、体系的にJavaを学びたいのであれば、書籍で学習するのも良い方法です。
特に、中山清喬さん、国本大悟さんによる『スッキリわかるJava入門 第4版』は、初心者がつまずきやすいポイントを丁寧に解説しており、多くのプログラマーに支持されている一冊です。
独学が難しいと感じる場合は、ProgateやUdemyといったオンライン学習サービスを利用し、実際に手を動かしながら学ぶのも効果的でしょう。
まとめ
Javaのwhile文について、基本から応用まで解説しました。
最後に、重要なポイントを振り返っておきましょう。
- while文は「条件を満たす間」処理を繰り返す命令です。
- ループには「初期化」「条件式」「更新処理」の3要素が不可欠です。
- 繰り返す回数が明確ならfor文、不確定ならwhile文と使い分けましょう。
- 更新処理を忘れると無限ループになるため、注意が必要です。
- `break`でループを抜け、`continue`で処理をスキップできます。
今回学んだ知識は、Javaプログラミングの様々な場面で役立ちます。
一番大切なのは、実際に自分でコードを書いてみることです。
この記事のサンプルコードを参考に、少し条件を変えたり、別の処理を追加したりして、while文の動きに慣れていってください。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。