2013年2月4日

JavaScript 初歩のまとめ ⑬ 制御文 while

前回の for 文に続いて、同じ繰り返し処理の while 文のまとめです。



while 文


while は プログラムの中のある処理を 繰り返して行うときに使う命令です。
良く似ている 繰り返しの命令に for がありますが、for が繰り返す回数を最初に指定するのに対して、while は条件を満たす間、何回も処理を繰り返すような場合に使うことが多いです。
但し繰り返しの条件に 比較演算子などを使って、for 文と似た使い方もできます。
while 文は次のように書きます。


while ( 繰り返しの条件 ) {
    実行する処理;
}


for 文の書き方と良く似ていますが、( ) の中に カウンタ変数は書きません。この条件で true が返る間はずっと { } の中の処理が繰り返されます。 実際に書いてみます。



ex.1


var x = 0;
while (2 * x + 10 != 30) {
    x++;
}
document.write (x);




ちょっと良いサンプルが思いつかなかったのですが、小学校で習うような算数の問題を、コンピュータに解かせるとして、人間のやる計算方法ではなくて、 x を0 から 1ずつ増やす総当たり方式で、答えが出るまで繰り返すやり方で解かせます。


ex.1の実行結果















これで気をつけないといけないと思ったのが、while は 条件を満たす ( true が返る ) 間、処理を繰り返す。と言う点です。言い換えると、false が返ると 1回も { } 内が実行されません。この点にだけ気を付ければ、あとは難しい事はないと思います。そこで 原始的ですが、数字当てのゲームを作ってみました。



ex.2


var inp; //ユーザーが入力する数
var ans = Math.floor (Math.random()*9 + 1); //乱数で発生させる答
var ctr = 0; //答えを入力した回数

while (true) {
ctr++;
inp = prompt ('1 ~ 10 の数字が変数に代入されています。その数を当てて下さい。');
if (inp == ans) {
document.write('正解。<br>正解までにかかった回数 ' + ctr + ' 回');
  break;
}
else if (inp > ans) {
alert ('ハズレです ' + inp + ' よりは小さい数です。');
}
else {
alert ('ハズレです ' + inp + ' よりは大きい数です。');
}
}



while の条件式を true にしています。この条件だと当然、常に true が返るので ループが終了しません。(無限ループと言うそうです)
無限ループのスクリプトを実行してしまうと、ブラウザが フリーズしたようになってしまって、強制終了しないといけなくなったりして なかなか面倒でした。ここは注意が必要な所です。
無限ループにならないようにしているのが、真ん中あたりの赤字で書いた break です。詳しくは 次回以降に まとめを書こうと思っているのですが、ここでは if 文と組み合わせて ある条件を満たしたときに while のループを抜けるための命令です。

while のまとめの内容から外れてしまいますが、このスクリプトで alert で表示している「ハズレ…」のメッセージは document.write( ) で表示させたかったのですが、どうしても上手く行きませんでした。もうちょっと 勉強が進んだら理由が判るかも知れません。


 ここ迄で while 文については終わりですが、while 文のバリエーションのような do … while 文というのもあるので、次回は それと、今回少し使ってみた break 等についてまとめてみようと思います。その前に また、CodeStudy で復習が必要になるかも…。



よろしかったらこちらもどうぞ

制御文に関する記事の一覧

0 件のコメント:

コメントを投稿