広告

手を動かして学ぶ Java入門 (while文)

環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java の while文 について学びます。

10分くらいで、さくっと終わる記事をめざしています。


シリーズ一覧

  1. 手を動かして学ぶ Java入門 (Hello world 編)
  2. 手を動かして学ぶ Java入門 (数値と演算)
  3. 手を動かして学ぶ Java入門 (数値と変数)
  4. 手を動かして学ぶ Java入門 (コメントの書き方)
  5. 手を動かして学ぶ Java入門 (文と式の違い)
  6. 手を動かして学ぶ Java入門 (if文)
  7. 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
  8. 手を動かして学ぶ Java入門 (文字列の連結)
  9. 手を動かして学ぶ Java入門 (while文)

続きは近日公開予定!

はじめに

この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/9/13 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)

実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。

詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。

while文とは

while文 (英: while statement) はプログラミング言語において繰り返し(ループ)の制御構造を記述するための文 (statement) である。

while文とは、処理を繰り返し実行するための制御文です。

簡単にいうと

  • 条件 A を満たしている間は B を処理し続ける

というコードです。

フローチャート1

Java の while文は、次のように記述します。

while (条件式) {
    ループ文
}

これが基本の形となります。

  • 条件式を 満たすとき、ループ文 が実行されます。(ループ文の実行後は、再度、条件式を評価します)
  • 条件式を 満たさないとき、while文は終わります。

それでは、プログラムで実際の動きを確認してみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

a = 1
a = 2
a = 3
while文終了

と表示されたら成功です。

【補足】

繰り返し制御文には、while文の他にも

  • for文
  • 拡張for文 (for-eachループ文)

があります。
いずれ解説できたらと思います。

コードの解説

それではコードを少しずつ見ていきましょう。

int a = 1;

while (a < 4) {
    System.out.println("a = " + a);
    a = a + 1;
}
System.out.println("while文終了");

フローチャート2

まずは変数 a を 1 で初期化します。

int a = 1;

次に、while 文の条件式を評価します。

while (a < 4) {
       ^^^^^ <--- 条件式!
    ...
}

条件式の評価については if文の記事 でもやりましたね。

変数 a は 1 なので、条件式は

1 < 4 

となり、条件を 満たしている ことになります。
(1 < 4 は真偽値の true を返します)

さて、while文の条件式が満たされているので、次はループ文が実行されます。

while (a < 4) {
    System.out.println("a = " + a);  // ループ文1
    a = a + 1;                       // ループ文2
}

ループ文には、複数の文を書いても問題ありません。
今回のコード例では2つの文がありますね。

ループ文1は println メソッドで変数 a を表示します。

System.out.println("a = " + a);

ループ文2は変数 a に 1 を足します。

a = a + 1;

変数 a は 1 なので、

a = 1 + 1;

ということですね。
1 + 1 の結果を変数 a に代入すると、変数 a は 2 になります。

これでループ文の処理は終わりました。
そうしたら、再び while文の条件式の評価に戻ります。

while (a < 4) {
       ^^^^^ <--- 条件式!
    ...
}

先ほどとは違って変数 a は 2 になっています。
ただし、2 < 4 はまだ条件式を満たしているので、またループ文を実行します。

すると、変数 a は 3 になります。

再び while文の条件式を評価します。
条件式は 3 < 4 です。条件は満たしているので、またまたループ文を実行します。

さあ、変数 a は 4 になりました。

再び while文の条件式を評価します。
条件式は 4 < 4 です。これは条件を満たしていません。(4 は 4 より小さくはありません)

そのため、ループ文は 実行せずに while文は終わります。

while (a < 4) {
    ...
}
System.out.println("while文終了");

while文が終わったので、最後に "while文終了" と表示します。

それでは、少し数値をいじったプログラムを動かしてみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」してみてください。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)


無限ループに注意

無限ループ(むげんループ)は、コンピュータ・プログラム等の一連の手続き等が無限に繰り返される(ループする)ことである。

無限ループとは、

  • 条件式が 満たされないで ループ文が無限に処理され続ける

という状態のことをいいます。

もし無限ループが起きてしまうと、不具合の症状の1例としては、アプリは反応がなくなりフリーズしてしまいます。
アプリのクラッシュと並んで、致命的なバグの1つですね。

例えば、次のようなコードで無限ループが発生します。

int a = 1;
while (true) {
    System.out.println("a = " + a);
    a = a + 1;
}

while文の条件式が固定値の true となっており、常に条件式が満たされます
そのため、このコードを実行すると、延々に

a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
・
・
・

と表示され続けることになります。

応用問題

【問題】

プログラムを実行すると、

a = 4
a = 2
a = 1

と「出力」へ表示されるようにしてください。

プログラム中で書き換えてよいのは2か所です。
1つめは、変数 a数値 で初期化してください。

int a = #;
        ^ <--- ★この部分

2つめは、変数 a の代入文です。

a = ###;
    ^^^ <--- ★この部分

例えば a = a - 1; のような感じで、書き換えてみてください。

それでは、下のプログラムの # の箇所を書き換えて「実行(Ctrl-Enter)」してみましょう。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

無事に、

a = 4
a = 2
a = 1

と出力されましたでしょうか?

もし解けなかった場合は、下記の回答例をご参照ください。

回答例

【コード】

public class Main {
    public static void main(String[] args) {
        int a = 4;
        while (a > 0) {
            System.out.println("a = " + a);
            a = a / 2;
        }
    }
}

【出力】

a = 4
a = 2
a = 1

まとめ

Java の while文は、次のように記述します。

while (条件式) {
    ループ文
}
  • 条件式を 満たすとき、ループ文 が実行されます。(ループ文の実行後は、再度、条件式を評価します)
  • 条件式を 満たさないとき、while文は終わります。

while文は、Java において、もっとも基本的な繰り返し制御文です。

while文については、まだ break文と continue文についての解説が残っています。
そちらについては、また別途記事にしたいと思います。

もう少し詳しいことは「while文の基本 (文法)」の記事でも解説しています。
興味がありましたら、そちらもぜひご参照ください。

それでは次回もお楽しみに。


関連記事

  1. 手を動かして学ぶ Java入門 (Hello world 編)
  2. 手を動かして学ぶ Java入門 (数値と演算)
  3. 手を動かして学ぶ Java入門 (数値と変数)
  4. 手を動かして学ぶ Java入門 (コメントの書き方)
  5. 手を動かして学ぶ Java入門 (文と式の違い)
  6. 手を動かして学ぶ Java入門 (if文)
  7. 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
  8. 手を動かして学ぶ Java入門 (文字列の連結)
  9. 手を動かして学ぶ Java入門 (while文)
ページの先頭へ