0

n00b の質問についてお詫び申し上げます。無限ループに関連する問題を調べてみましたが、もっと複雑です。

var replay = 1;
while (replay = 1) {
replay = prompt("Yes(1) or No(0) ?");
}

なぜこれが無限ループなのですか?

この while ループは、replay 変数の値が 1 の間だけ反復を続けると思いました。

ただし、ユーザー入力が0の場合でも停止しません。

ご意見をお寄せいただきありがとうございます。

4

5 に答える 5

4

比較ではなく割り当てを行っています。

変化する:

while (replay = 1) { // Will always have a value of 1

に:

while (replay == 1) { // Will have a value of true or false
于 2013-08-09T23:19:40.503 に答える
3

while 部分の==代わりに使用します。=

于 2013-08-09T23:19:38.730 に答える
1

チェックインではなく割り当てています (replay = 1)

オペランドの型の等価性もチェックする二重の等号==、またはより良いのは三重の等号が必要です。===

さらに、コードを次のように変更できます (プレビュー: http://jsfiddle.net/nabil_kadimi/RfdA5/ ):

var replay;
while ((replay = window.prompt("Yes(1) or No(0) ?")) === '1') {
  /* player wants to replay */;
}

またはさらに良い (プレビュー: http://jsfiddle.net/nabil_kadimi/pdV4M/ ):

var replay;
while (replay = window.confirm("Replay?")) {
  /* player wants to replay */;
}
于 2013-08-09T23:54:42.847 に答える
1

while ループで = (代入) の代わりに == (等価) を使用する必要があります

while(replay == 1) {
  //code
 }

JavaScript は本来あるべきことを行っています。ループが繰り返されるたびに、値 1 を replay に再割り当てしています。続行する前に、リプレイが 1 に等しいかどうかを確認する必要があります。

于 2013-08-09T23:20:07.520 に答える
0

while ループで代入演算子===の代わりに比較演算子を使用します。=

また、 a をprompt返すため、 astringと比較する必要がありますstring

var replay = "1";
while (replay === "1") {
  replay = prompt("Yes(1) or No(0) ?");
}
于 2013-08-09T23:23:34.893 に答える