前回は「for文(決まった回数くり返す)」をやりました。

今回は、もうひとつのくり返し、while文(ホワイルぶん)です。for文との使い分けが分かると、くり返しの理解がぐっと深まります。

while文とは、「ある条件が成り立つ間、くり返す」しくみです。

for文と、何が違うのか

for文は「5回くり返す」のように、回数が決まっているくり返しが得意でした。

でも、世の中には「何回くり返すか、やってみないと分からない」ことがあります。

「正しいパスワードが入力されるまで、聞き続ける」
「ゲームで、ライフが0になるまで、続ける」
「合計が100を超えるまで、足し続ける」

これらは、回数ではなく「条件」でくり返しが決まります。何回で終わるかは、その時々で変わる。

こういうときに使うのが、while文です。料理でいうなら、「とろみがつくまで、混ぜ続ける」ような感じ。回数ではなく、状態で終わりが決まります。

書き方を見てみる

カウントが5になるまでくり返す、シンプルな例です。

int count = 0;

while (count < 5)
{
    Console.WriteLine(count);
    count++;
}

実行すると、こうなります。

0
1
2
3
4

形を見てみましょう。

while (条件)
{
    くり返したい処理
}

while のカッコの中に、続ける条件を書きます。条件が true の間、{ } の中をくり返します。

流れはこうです。

  1. 「count(0)< 5?」→ true。中を実行(0を表示)。countを1増やす
  2. 「count(1)< 5?」→ true。中を実行(1を表示)。countを1増やす
  3. ……くり返す
  4. 「count(5)< 5?」→ false。くり返し終了

結果は、実はfor文の例と同じです。

for文と、書き方をくらべてみる

さっきのwhile文と、同じ動きをするfor文を並べてみます。

// while文
int count = 0;
while (count < 5)
{
    Console.WriteLine(count);
    count++;
}

// for文
for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

実は、for文は「カウンターを使ったwhile文」を、コンパクトにまとめた形なんです。

  • for文は、カウンターの準備・条件・増やすを 1行にまとめている
  • while文は、それらを バラバラに書く

だから、回数が決まっているなら for文、条件しだいなら while文、と使い分けるのが自然です。

「やってみないと分からない」ときに、真価を発揮する

while文が本当に役立つのは、こういう場面です。

string answer = "";

while (answer != "おはよう")
{
    Console.WriteLine("合言葉を入力してください");
    answer = Console.ReadLine();
}

Console.WriteLine("正解です!");

「おはよう」と入力されるまで、何度でも聞き続けます。

1回で正解するかもしれないし、10回間違えるかもしれない。何回くり返すかは、やってみないと分からない。こういうとき、while文が活躍します。for文では、こうはいきません。

!= は「等しくない」という意味です。「answerがおはようでない間、くり返す」ですね。)

つまずきポイント

for文と同じく、無限ループに注意です。

int count = 0;

while (count < 5)
{
    Console.WriteLine(count);
    // count++ を書き忘れている!
}

count++(countを増やす)を忘れると、count はずっと0のまま。「0 < 5」が永遠に true で、止まらなくなります

while文は、for文と違ってカウンターを増やす場所が決まっていません。だから 「条件を false にする処理」を、自分で必ず中に入れる。これを忘れないようにしましょう。

まとめ

while文は、条件が成り立つ間くり返すしくみ。

while (条件)
{
    くり返したい処理
    // 条件をいつか false にする処理を忘れずに
}
  • 回数が決まっているなら → for文
  • 条件しだい(何回か分からない)なら → while文

次回は、くり返しを途中で「抜ける」「飛ばす」ための、break と continue です。