手を動かして学ぶ Java入門 (while文)
環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java の while文 について学びます。
10分くらいで、さくっと終わる記事をめざしています。
シリーズ一覧
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)
続きは近日公開予定!
はじめに
この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/12/17 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)
実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。
詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。
while文とは
while文とは、処理を繰り返し実行するための制御文です。
簡単にいうと
- 条件 A を満たしている間は B を処理し続ける
というコードです。
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文終了");
まずは変数 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文の基本 (文法)」の記事でも解説しています。
興味がありましたら、そちらもぜひご参照ください。
次回は「手を動かして学ぶ Java入門 (break文)」になります。
関連記事
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)