2017-02-01 17 views
0

私はjavascriptを使い慣れていないので、これは私のバックストーリーです:)このコードはブラウザをクラッシュさせてしまい、キャンセルしなければプロンプトをキャンセルできません最初の試みでは、私が数字を入力するかどうかは...とにかく、ゲームは動作しません。それは、秘密の数字が人の推測番号であるポイントに到達することだけです。プロンプトをキャンセルするために、私は(答え=== null ||答え===偽||答え=== "ヌル") 休憩;それは動作しません。誰でも助けることができますか?ありがとう。私がフォローアップの質問を持ってJavascript、無限ループのプロンプトとそのループの停止

<script> 
var secret_number=Math.floor((Math.random() * 10) + 1); 
var answer=prompt("Enter a number you want to try"); 

while(secret_number!==Number(answer)) 
{ 
if(name===null||name===false||name==="null") 
break; 

if(Number(answer)>secret_number) 
prompt("This number is too high!"); 

else if(Number(answer)<secret_number) 
prompt("This number is too low!"); 

else 
prompt("You got it!"); 
} 

</script> 

は、ここに私のコードです。私は人々が私に言ったし、この思い付いた考慮した:「!あなたはそれを得た」

var secret_number=Math.floor((Math.random() * 10) + 1); 
var answer=parseInt(prompt("Enter a number you want to try")); 

while(secret_number!==answer) 
{ 
if(answer == null || answer == "" ||isNaN(answer)) 
break; 

if(answer>secret_number) 
answer=prompt("This number is too high!"); 

else if(answer<secret_number) 
answer=prompt("This number is too low!"); 

else 
alert("You got it!"); 
} 

私の質問は、私に来るか、ありますアラートは無限に続くのですか?私はそれをそこに壊すことができることを知っているが、なぜそれがそれを続けているのか知りたい。それはsecret_number ===答えを持ち、whileループから抜け出す必要があります。明らかにそうしているわけではありません。理由は分かりません。ありがとうございました。

+0

:また、それは作業バージョン

、ユーザが入力した場合、何もanswerは空の文字列("")に設定されないことは注目に値します|| name === "null") 'name'は' answer'ではありませんか? –

+0

申し訳ありませんが、私は答えを意味しましたが、ええ、元のコードで回答しました。 –

+0

皆さん、ありがとう、とても助かりました! –

答えて

0

無限ループを起こす理由は、answerの値を内部で変更しないためですあなたのループ。その結果、whileの条件が評価されるたびに、answerはプロンプトに最初に入力された数であり、ループは再び実行されます。偽===(名=== nullの場合 `で||名

var secret_number=Math.floor((Math.random() * 10) + 1); 
var answer=prompt("Enter a number you want to try"); 

while(secret_number!==Number(answer)) 
{ 
    if(answer===null || answer = ""){ 
    break; 
    } 

    if(Number(answer)>secret_number){ 
    answer = prompt("This number is too high!"); 
    } 
    else if(Number(answer)<secret_number){ 
    answer = prompt("This number is too low!"); 
    } 

    else{ 
    alert("You got it!"); 
    } 
} 
2

whileループが危険なのはなぜか分かりました。ここでの最善の解決策は、ユーザーの推測量を制限し、ループ内で増分され、単にforループで実行できるカウンターが必要なことです。

また、中括弧を使用してifブランチを囲みます。

最後に、文字列を数値に変換する最も良い方法は、parseInt()parseFloat()です。文字列を取得すると変換が正しく行われ、使用するたびに変換を継続する必要はありません。

var secret_number = Math.floor((Math.random() * 10) + 1); 
 
alert("For testing only: The secret number is: " + secret_number); 
 
var answer = parseInt(prompt("Enter a number you want to try"), 10); 
 

 
const GUESSES = 3; 
 

 
for(var i = 0; i < GUESSES; ++i){ 
 
    if(!isNaN(answer)){ 
 
    
 
    if(answer > secret_number) { 
 
     answer = prompt("Try again...This number is too high! (" + (GUESSES - i - 1) + " guesses left.)"); 
 
    } else if(answer < secret_number) { 
 
     answer = prompt("Try again...This number is too low! (" + (GUESSES - i - 1) + " guesses left.)"); 
 
    } else { 
 
     alert("You got it!"); 
 
     break; 
 
    } 
 
    } else { 
 
    alert("You didn't enter a number!"); 
 
    break; 
 
    } 
 
    
 
}

0

問題はpromptがループの前にあるということです。 whiledo whileにを変更すると、それを修正することができます:

var secret_number=Math.floor((Math.random() * 10) + 1); 
 

 
do { 
 
    var str = prompt("Enter a number you want to try"), 
 
     answer = Number(str); 
 

 
    if (!str || isNaN(answer)) { 
 
    alert('Bye'); 
 
    break; 
 
    } 
 
    
 
    if (answer > secret_number) { 
 
    alert("This number is too high!"); 
 
    } else if (answer < secret_number) { 
 
    alert("This number is too low!"); 
 
    } else { 
 
    alert("You got it!"); 
 
    } 
 
    
 
} while (secret_number !== answer);

0

はこれを試してみてください。それが役に立てば幸い。何の答えが用意されていない場合

<script> 
 
var secret_number=Math.floor((Math.random() * 10) + 1); 
 

 
var answer=prompt("Enter a number you want to try"); 
 

 
while(secret_number!=Number(answer)){ 
 

 
\t if(Number(answer)>secret_number){ 
 
\t \t answer = prompt("This number is too high!"); 
 
\t } 
 
\t else if(Number(answer)<secret_number){ 
 
\t \t answer = prompt("This number is too low!"); 
 
\t } 
 
} 
 

 
prompt('correct!'); 
 
</script>

0

これはあきらめのあなたの意図を保持しようとする際に他の回答の一部異なるだけである:

var secret_number=Math.floor((Math.random() * 10) + 1); 
var answer=prompt("Enter a number you want to try"); 

while(secret_number!==Number(answer)) { 
    // "" covers case of clicking OK with nothing entered 
    // null covers case of clicking Cancel 
    if(answer == null || answer == "") { 
     break; 
    } 

    if(Number(answer)>secret_number) { 
     answer = prompt("This number is too high!"); 
    } else if(Number(answer)<secret_number) { 
     answer = prompt("This number is too low!"); 
    } 
} 
if (secret_number!==Number(answer)) { 
    alert("You gave up :("); 
} else { 
    alert("You got it!"); 
} 

フィドル:https://jsfiddle.net/h10qt0nn/1/

関連する問題