while
ループ
while
ループは、if
文とよく似ており、基本的にif
文を繰り返し実行する。if
と同様に、while
も論理式を受け取り、論理式がtrue
の場合にブロックを評価する。違いは、while
文は、論理式がtrue
である限り、論理式を評価し、ブロック内の式を1回だけ実行するのではなく、繰り返し実行することだ。このようにコードのブロックを繰り返し実行することを、ループと呼ぶ。
while
文の構文は次の通りだ。
例えば、クッキーがある限りクッキーを食べ続けることを表すコードは、次のように記述できる。
このプログラムは、existsCookie
の値がtrue
から変化しないため、ループを繰り返し続ける。
while
は、プログラムの実行中に論理式の値が変化する場合に便利だ。これを確認するために、数値が0以上の間、ユーザーから数値を入力するプログラムを作成しよう。int
変数の初期値は0であることを覚えておいてほしい。
このプログラムは、入力された数値に感謝し、数値が0未満になった場合にのみループを終了する。
continue
文
continue文は、ブロックの残りの式を実行せずに、ループの次の反復をすぐに開始する。
上記のプログラムを少し厳密に変更しよう。任意の数字に対して"ありがとう"と表示する代わりに、13は受け付けないようにする。次のプログラムでは、13に対して"ありがとう"と表示しない。なぜなら、その場合はcontinue
文によってプログラムがループの先頭に戻り、論理式が再度評価されるからだ。
このプログラムの動作を"0以上であれば数値を受け取り、13はスキップする"と定義できる。
continue
は、do-while
、for
、およびforeach
文でも同様に動作する。これらの機能については、後の章で説明する。
break
文
while
ループから抜け出す必要がなくなった場合、break
を使用すると、プログラムはすぐにループから抜け出せる。次のプログラムは、特別な数値が見つかった時点でループから抜け出す。
この動作を要約すると、"数値が0以上であるか、または数値が42になるまで数値を受け取る"となる。
break
は、do-while
、for
、foreach
、switch
文でも機能する。これらの機能については、後の章で説明する。
無条件ループ
論理式を意図的に定数true
にする場合がある。break
文は、このような無条件ループを終了するための一般的な方法だ。(無限ループは、無条件ループを意味する別の用語だが、完全に正確ではない。)
次のプログラムは、無条件ループでメニューを表示する。このループを終了する唯一の方法は、break
文を使うことだ。
注釈: 例外も無条件ループを終了させることができる。例外については、後の章で説明する。
演習
- 次のプログラムは、入力が3の間ループを続けるように設計されているが、バグがある:入力要求が表示されない:
バグを修正して、入力が3の間ループを続けるようにする。
- コンピュータがアンナとビルがゲームをするのを手伝うようにしよう。まず、コンピュータはアンナから1から10までの範囲の数字を受け取る必要がある。プログラムは他の数字を受け入れてはならず、再度入力するように促す必要がある。
アンナから有効な数字を受け取ったら、ビルから数字を受け取り続け、ビルがアンナの数字を正しく当てるまで続ける。
注釈:アンナが入力した数字は、当然ながら端末に残り、ビルにも見える。この事実を無視して、
while
文の演習としてプログラムを書いてみよう。