我是 javascript 新手,所以这就是我的背景故事 :) 这段代码不断使我的浏览器崩溃,并且如果我在第一次尝试时没有取消,无论我输入数字,它都不会让我取消提示或不......无论如何,即使游戏也行不通,这只是为了达到 secret 数字是人们猜测的数字的程度。为了取消提示,我什至尝试了 if(answer===null||answer===false||answer==="null") 休息;但这行不通。有人可以帮忙吗?谢谢。
这是我的代码:
<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===answer 并打破 while 循环,所以显然它没有这样做,我不明白为什么。再次感谢你。
最佳答案
您已经发现为什么 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;
}
}
关于Javascript,关于无限循环提示和停止该循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41970711/