Table of Contents
前回は、同じ処理を繰り返し行う際に便利な for文 について紹介しました。
Javaで繰り返し処理に使える構文はもうひとつあります。
whileループ
ある条件が true である場合にループ処理を実行するのが while文 です。
書き方は for文 よりも単純です。
while (ループを実行するかどうかboolean値) { // ここに繰り返し行いたい処理 }
具体的な while文 の使用例を紹介します。
以下は、キーボードから 0 と入力されるまで、キーボードから値を入力させ続けるプログラムです。
import java.util.Scanner; public class Test { public static void main(String args[]) { System.out.print("整数値を入力してください(0で終了): "); Scanner scan = new Scanner(System.in); int inputValue = scan.nextInt(); // inputValue が 0 でなければループ while (inputValue != 0) { System.out.println("入力された値は" + inputValue + "でした"); System.out.print("再び整数値を入力してください(0で終了): "); inputValue = scan.nextInt(); } scan.close(); System.out.println("終了します"); } }
実行結果です。0 が入力され、条件が false になるまでプログラムが実行され続けます。
最低一回は処理を実行する do-while
while文 は、条件部分「ループを実行するかどうかboolean値」が初めから false であった場合、一度もループ内の処理を実行しません。
先ほどのプログラムを以下のように書き換えた場合、変数 inputValue の初期値は 0 なので、whileループの処理が一度も実行されません。
import java.util.Scanner; public class Test { public static void main(String args[]) { Scanner scan = new Scanner(System.in); int inputValue = 0; // inputValue が 0 でなければループ while (inputValue != 0) { System.out.print("整数値を入力してください(0で終了): "); inputValue = scan.nextInt(); System.out.println("入力された値は" + inputValue + "でした"); } scan.close(); System.out.println("終了します"); } }
条件に関わらず、初めの一回はループ内の処理を実行してほしいという場合は、do-while文 を使用します。
do-while文 の書き方は以下の通りです。
do { // ここは一度実行され、2度目以降は条件を満たした場合のみ実行される } while (ループを実行するかどうかboolean値);
do-while文 の具体的な使用例を以下に示します。
import java.util.Scanner; public class Test { public static void main(String args[]) { Scanner scan = new Scanner(System.in); int inputValue = 0; // 2回目以降に inputValue が 0 でなければループ do { System.out.print("整数値を入力してください(0で終了): "); inputValue = scan.nextInt(); System.out.println("入力された値は" + inputValue + "でした"); } while (inputValue != 0); scan.close(); System.out.println("終了します"); } }
このプログラムの実行結果です。
無限ループに注意
for や while の 「ループを実行するかどうかboolean値」 の部分を、絶対に false にならないものにしてしまった場合、処理が永遠に終わらない無限ループに陥ります。
こうなってしまった場合、プログラムを強制終了させるしかありません。
例えば、次のようなwhileループです。「ループを実行するかどうかboolean値」の部分に直接 true を書いています。
while (true) { // !ここは永遠に実行され続ける }
これは極端な例ですが、条件部分がこのような状態になるループを作らないよう気をつけましょう。