Java道|while文のしくみと使い方

条件を見ながら、必要なだけくり返す。
while文を覚えると、Javaの処理は「回数」だけでなく「状態」に合わせて動かせる。

これまで学んできた for文 は、何回くり返すかがある程度はっきりしている処理を書くのに向いていました。

たとえば、5回表示する、1から10まで順番に処理する、入力された数だけ記号を表示する、といった場面では for文 がとても便利でした。

一方で、プログラムの中には「最初から回数は決まっていないけれど、ある条件が成り立っている間は続けたい」という処理もあります。

たとえば、まだ任務が終わっていない間は確認を続ける、目標に達するまで修行を続ける、正しい値が入力されるまで待つ、といった流れです。

このようなときに活躍するのが while文 です。

while文は、まず条件を確認し、その条件が true である間だけ処理をくり返します。条件が false になった時点で処理を終えるため、回数よりも「状態」や「条件」を基準にした繰り返しに向いています。この記事では、指定内容に沿って Sample5.java のみを使い、while文の基本、動き方、for文との違い、無限ループの注意点までを、鬼滅の刃風の世界観にたとえながら整理します。

鬼滅の刃風にたとえると、while文は「条件が続く間だけ型の確認を続ける修行」です。
まだ確認が終わっていないなら続ける。
条件を満たさなくなったら修行を終える。
このように、while文は「今も続けるべきか」を毎回確認しながら進む繰り返しです。

while文とは何か

while文は、条件が true である間、同じ処理を何度もくり返すための構文です。

基本の形は次のようになります。

while(条件){
    文;
    ...
}

↓クリックすると拡大表示されます。

この構文では、最初に条件を調べます。

条件が true なら、ブロックの中の文を上から順に実行します。
ブロック内の処理が終わったら、もう一度条件を調べます。
この流れを、条件が false になるまでくり返します。

条件の結果while文の動き
trueブロック内の処理を実行する
falsewhile文を終了する

つまり、while文は「条件が続いている間だけ処理を続ける仕組み」です。

鬼滅の刃風にたとえると、while文は「任務確認が必要な間だけ、同じ確認動作を続ける型」です。
確認が必要なら続ける。
確認が不要になったら終わる。
この判断を毎回行います。

while文の流れ

while文の処理の流れは、次のようになります。

手順内容
1条件を確認する
2条件が true ならブロック内の処理を実行する
3処理が終わったら、もう一度条件を確認する
4条件が false になったら終了する

ここで大切なのは、while文は処理を始める前に条件を確認するという点です。

そのため、最初の時点で条件が false なら、ブロックの中は1回も実行されません。

たとえば、次のような考え方です。

while(宿題が終わっていない){
    宿題を進める;
}

宿題が終わっていないなら、宿題を進めます。
宿題を進めたあと、もう一度「まだ終わっていないか」を確認します。
すでに終わっているなら、最初から何も実行されません。

鬼滅の刃風にたとえると、任務前の確認で「まだ確認が必要か」を先に見るようなものです。
必要なら確認を続けます。
必要なければ、その確認作業は行わず次の行動へ進みます。

while文は条件でくり返す

for文とwhile文は、どちらも繰り返し処理に使えます。
ただし、得意な場面が少し違います。

向いている場面
for文回数が決まっている繰り返し
while文条件が成り立つ間だけ続ける繰り返し

for文は、何回くり返すかが見えやすい構文です。

たとえば、5回表示する、1から10まで順番に処理する、といった処理では for文 が自然です。

一方、while文は「どんな条件の間、続けるのか」が見えやすい構文です。

たとえば、次のような場面です。

やりたいことwhile文の考え方
点数が目標に届くまで勉強する目標未達の間は続ける
在庫がある間だけ処理する在庫が残っている間は続ける
終了が選ばれるまでメニューを出す終了されていない間は続ける
条件を満たしている間だけ確認する条件が true の間は続ける

鬼滅の刃風にたとえると、for文は「10回素振りする」のように回数が決まった修行です。
while文は「呼吸が乱れている間は整える」のように、状態を見ながら続ける修行です。

図:while文は条件を先に確認する

↓クリックすると拡大表示されます。

この図が示していること

この図では、while文が条件判定から始まることを示しています。

まず i <= 5 のような条件を確認します。
条件が true なら、ブロック内の処理を実行します。
そのあと i++ のように値を更新し、もう一度条件を確認します。

条件が false になったら、while文は終了します。

ここから分かることは、while文は毎回条件を確認しながら進む繰り返しだということです。
また、最初から条件が false の場合、ブロック内の処理は1回も実行されません。

while文を理解する

ここでは、while文を使って、確認メッセージを5回表示するプログラムを見ていきます。

ファイル名:Sample5.java

class Sample5
{
    public static void main(String[] args)
    {
        int i = 1;  // 回数を数えるための変数

        while(i <= 5){
            System.out.println(i + "回目の確認です。今日も型の修行を進めましょう。");
            i++;  // 条件が変化するように1増やす
        }

        System.out.println("確認メッセージの表示が終わりました。");
    }
}

実行結果

1回目の確認です。今日も型の修行を進めましょう。
2回目の確認です。今日も型の修行を進めましょう。
3回目の確認です。今日も型の修行を進めましょう。
4回目の確認です。今日も型の修行を進めましょう。
5回目の確認です。今日も型の修行を進めましょう。
確認メッセージの表示が終わりました。

このプログラムでは、まず i に 1 を入れています。

int i = 1;

この i は、何回目の確認かを数えるための変数です。

そのあと、while文で i <= 5 を確認しています。

while(i <= 5)

i が 5 以下である間は、ブロックの中の処理を実行します。

System.out.println(i + "回目の確認です。今日も型の修行を進めましょう。");
i++;

メッセージを表示したあと、i++ によって i を1増やします。

この i++ があることで、条件 i <= 5 が少しずつ false に近づいていきます。

Sample5.javaの動き

Sample5.java の流れを表で追うと、次のようになります。

i の値条件 i <= 5実行内容
1true1回目のメッセージを表示し、i++
2true2回目のメッセージを表示し、i++
3true3回目のメッセージを表示し、i++
4true4回目のメッセージを表示し、i++
5true5回目のメッセージを表示し、i++
6falsewhile文を終了

i が 1 から 5 の間は、条件 i <= 5 が true です。
そのため、確認メッセージが表示されます。

5回目の処理が終わると、i++ によって i は 6 になります。
次に条件 i <= 5 を確認すると、6 <= 5 は false です。

そのため、while文は終了し、次の文へ進みます。

System.out.println("確認メッセージの表示が終わりました。");

この文は while文 の外にあるため、繰り返しが終わったあとに1回だけ表示されます。

鬼滅の刃風にたとえると、1回目から5回目まで型の確認を行い、6回目に入ろうとしたところで「もう条件を満たしていない」と判断して修行を終える流れです。

while文の大事なポイント

Sample5.java で特に大切なのは、条件がいつか false になるようにしていることです。

今回のコードでは、次の行があります。

i++;

この処理によって、i の値は 1ずつ増えます。

処理i の変化
開始時1
1回目のあと2
2回目のあと3
3回目のあと4
4回目のあと5
5回目のあと6

i が増えることで、最初は true だった i <= 5 が、最終的には false になります。

while文では、条件だけでなく、その条件が変化する仕組みも一緒に考えることが大切です。

条件を変化させないとどうなるか

while文では、条件が true のまま変わらないと、処理が終わらなくなることがあります。

これを無限ループといいます。

たとえば、次のようなコードは注意が必要です。

int i = 1;

while(i <= 5){
    System.out.println(i + "回目の確認です。");
}

このコードでは、i の値を増やす処理がありません。

そのため、i はずっと 1 のままです。

項目状態
初期値i は 1
条件i <= 5
値の変化i が変わらない
結果条件がずっと true のままになる

i が 1 のままなら、i <= 5 は何度確認しても true です。
その結果、while文は終わらず、同じ処理を何度も実行し続けます。

鬼滅の刃風にたとえると、「5回まで修行」と決めているのに、回数札を進め忘れている状態です。
回数札がずっと1のままなので、いつまでも条件を満たしてしまい、修行が終わりません。

図:i++ がないと無限ループになりやすい

↓クリックすると拡大表示されます。

この図が示していること

この図では、while文で値を更新することの大切さを示しています。

左側では、i++ によって i の値が増えていきます。
その結果、最終的に i は 6 になり、i <= 5 が false になります。
そのため、while文は終了します。

右側では、i++ を忘れているため、i が 1 のまま変わりません。
i <= 5 はずっと true のままなので、while文が終わらない状態になります。

ここから分かることは、while文では「条件がいつか false になるように値を変化させる」ことがとても重要だということです。

for文との関係

while文とfor文は、似た処理を書けることがあります。

Sample5.java のように、i を 1 から 5 まで増やしながら表示する処理は、for文でも表せます。

for(int i = 1; i <= 5; i++){
    System.out.println(i + "回目の確認です。今日も型の修行を進めましょう。");
}

このfor文は、初期化、条件式、変化式が1行にまとまっています。

一方、while文では、それぞれを別々の場所に書きます。

int i = 1;

while(i <= 5){
    System.out.println(i + "回目の確認です。今日も型の修行を進めましょう。");
    i++;
}

比較すると、次のようになります。

比較項目for文while文
初期化for の丸かっこの中に書くwhile の前に書く
条件for の丸かっこの中に書くwhile の丸かっこの中に書く
変化for の丸かっこの中に書くブロック内に書くことが多い
見えやすいもの回数の管理条件による継続
向いている場面回数が明確条件や状態が主役

今回のように、回数がはっきりしている処理なら for文 でも自然に書けます。

ただし、while文を使うと、「条件が true の間だけ続ける」という考え方がはっきり見えます。

鬼滅の刃風にたとえると、for文は「5回素振りする」と最初から回数を決めた修行です。
while文は「まだ条件を満たしている間は確認を続ける」という状態重視の修行です。

while文では最初に条件を調べる

while文の重要な特徴として、最初に条件を確認する点があります。

たとえば、次のようなコードを考えます。

int i = 10;

while(i < 5){
    System.out.println("表示されます。");
}

この場合、最初の時点で i < 5 は false です。

i の値条件 i < 5ブロック内の処理
10false1回も実行されない

while文は、条件を確認してから処理を始めます。
そのため、最初から条件が false なら、ブロックの中は一度も実行されません。

この性質は、とても大切です。

while文は「条件を満たしているときだけ始まる繰り返し」だと考えると分かりやすいです。

while文の見方のコツ

while文を読むときは、次の3つをセットで確認すると理解しやすくなります。

注目する点確認する内容
初期値変数がどこから始まるか
条件どこまで続くのか
変化条件がどう変わっていくか

Sample5.java なら、次のように整理できます。

注目点内容
初期値i = 1
条件i <= 5
変化i++

この3つを見ると、i が 1 から始まり、5 以下の間だけ処理され、1回ごとに i が増えていくことが分かります。

つまり、5回実行されたあと、i が 6 になって終了します。

while文が読みにくいと感じたときは、いきなり全体を理解しようとせず、初期値、条件、変化の3つに分けて見ると整理しやすくなります。

while文で気をつけたいこと

while文はシンプルですが、注意点もあります。

よくあるミス内容
更新を書き忘れる無限ループになる
条件式を間違える繰り返し回数がずれる
初期値を誤る最初から実行されないことがある
ブロックの範囲を見落とすどこまで繰り返すか分かりにくくなる
条件がいつ false になるか考えていない終了しない処理になりやすい

特に多いのは、更新を書き忘れることです。

for文では、i++ のような変化式が丸かっこの中にまとまっていることが多いです。
しかし、while文では更新処理をブロック内に書くことがよくあります。

そのため、うっかり i++ を忘れると、条件が変わらず無限ループになりやすいです。

while文を書くときは、次のように確認すると安心です。

確認すること理由
初期値は正しいか最初の条件判定に影響する
条件式は正しいか続ける範囲を決める
値は更新されるかいつか終了できるようにする
false になるタイミングはあるか無限ループを防ぐ
ブロックの範囲は正しいか繰り返す処理を明確にする

while文が役立つ場面

while文は、回数よりも条件や状態を中心にした繰り返しで役立ちます。

たとえば、次のような場面です。

場面while文が向いている理由
ユーザーが終了を選ぶまでメニューを表示する終了が選ばれるまで回数が決まらない
正しい値が入力されるまで受け付ける何回入力されるか分からない
条件を満たすまで計算を続ける目標に届くまで繰り返す
データが残っている間だけ読み込むデータの数や終わりが状態で決まる
任務が完了するまで確認する完了状態になるまで続ける

for文は「何回くり返すか」がはっきりしているときに便利です。
while文は「いつ終わるかが条件で決まる」ときに便利です。

鬼滅の刃風にたとえると、while文は「敵の気配がある間は警戒を続ける」「呼吸が整うまで集中を続ける」「任務完了の合図が出るまで確認を続ける」といった処理に向いています。

while文を学ぶ意味

while文を使えるようになると、プログラムの流れを「回数」だけでなく「状態」でも考えられるようになります。

これはJavaの学習を進めるうえで、とても大切です。

for文は、回数が見やすい繰り返しです。
while文は、条件の流れが見やすい繰り返しです。

見方向いている文
何回繰り返すかを中心に考えるfor文
どの条件の間続けるかを中心に考えるwhile文

この違いを理解して使い分けられるようになると、書けるプログラムの幅が広がります。

while文で特に大切なのは、次の3つです。

大切なこと内容
条件が true の間くり返す条件が続く限り処理する
最初に条件を確認するfalse なら1回も実行されない
条件が変化するように書くいつか終了できるようにする

鬼滅の刃風にたとえると、while文は「状態を見ながら続ける型」です。
何回やるかよりも、まだ続ける条件があるかを重視します。

この感覚をつかんでおくと、この先のループ処理や、より実践的なJavaプログラムの理解につながります。