もっともシンプルなwhile文
前回はfor文について説明しました。
今回はwhile文について説明します。for文もwhile文も繰り返し処理に使用しますが、使い方が異なります。for文はベクトルの配列数だけ繰り返すと説明しました。つまり、あらかじめ繰り返す回数が決まっていました。一方、while文は条件が満たされる限り処理を繰り返します。回数は決まってないけど、条件が満たしている間は繰り返してほしい場合に使用すると便利です。
早速for文と同様にシンプルなwhile文の例を記述します。
a = 0;
while a < 10
a = a + 1;
disp(a);
end上記のコードの実行結果は下記のようになります。

上記の画像のようにコマンドウインドウに1~10までの数字が並んでいれば成功です。MATLABでwhile文を記述する場合には、2行目の「while a<10」という記述と、5行目の「end」という記述をします。2行目の記述の意味は「a」という値が10より小さい場合繰り返し実行するという意味になります。
実際aは最初の時点では0が代入されていましたが、while文の中身が実行される度に1ずつ加算され、a<10を満たさなくなりループが終了します。
繰り返す回数が未定のwhile文
先ほどの例では繰り返す回数が簡単にわかる例でした。その場合while文を使うメリットはあまりありません。次の例では繰り返す回数が決まっていません。
a = 0;
while a < 20
a = a + randi(4);
disp(a);
end実行するごとに結果は異なりますが、下記のような結果になりました。

今回の例では3行目でrandi(4)をaに加算しています。randi(4)は1,2,3,4のどれかの値をランダムに生成します。whileの条件がa<20なので、aが20未満の時に繰り返し実行します。randi(4)の出力がたまたま毎回1の場合、20回繰り返すことになります。実際にはランダムなので1加算されることもあれば4加算されることもあり、繰り返す回数を事前に知ることはできません。このような場合while文が非常に有効です。
一度も実行されないwhile文
while文はwhileとendに囲まれたコードが1度も実行されない場合があります。例えば下記のコードはwhileに続く条件文で「<」を「>」のように誤って記載した例です。
a = 0;
while a > 20
a = a + 1;
disp(a);
end上の例では1行目でa = 0を代入しているため 2行目でa>0とはならずにwhile文の中の処理が一度も実行されません。while文を使用する際は一度も実行されないことがないように注意が必要です。
無限ループ
while文では条件が満たされ続けるとループ処理が終了しないことがあります。これを無限ループといいます。例えば下記のように記述します。
a = 0;
while a < 20
disp(a);
enda = 0でa < 20が常に満たされるため、ループの処理が止まらなくなります。無限ループになってしまった場合はコマンドウインドウで「ctrl」+「c」を押して処理を終了させてください。無限ループをコード上で作ってしまうと、永遠に同じ処理が続いてしまうため処理が終わらず強制的に終了するしかなくなります。
まとめ
今回はwhile文について紹介しました。for文と同様に繰り返し処理を行うものですが、回数ではなく条件を指定して繰り返す場合に便利です。その際に、一度も実行されない場合や、無限ループとなる場合があるので十分に注意しましょう。
次回はif文について説明します。
コメント