我已经多次完成了FizzBuzz但从未遇到过这个问题。也许,这是我不理解的for循环的基础。出于某种原因,下面的代码比它应该运行的时间长10倍(好吧,比我想的那样)。如果用户输入20,则运行到200.我通过设置i = 0修复了问题。我< num然后将i + 1打印到我的div,但我仍然不明白为什么原始代码不能按预期工作。虽然我很喜欢,但我还是承认我仍然无法正确设置JSFiddle。 http://jsfiddle.net/nngrey/hA4pg/(这根本不会运行。)所以对此的任何想法也将受到赞赏。谢谢!
<head>
<title>Fizz Buzz</title>
<script>
function fizzbuzz(){
var num = prompt("Please enter a number between 1 and 100: ");
for(var i=1; i<num+1; i++){
if (i%3===0 && i%5===0){
document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Fizz Buzz</p>";
}else if (i%3===0){
document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Fizz</p>";
}else if (i%5===0){
document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Buzz</p>";
}else{
document.getElementById("div1").innerHTML = div1.innerHTML+"<p>"+i+"</p>";
}
}
}
</script>
</head>
<body onLoad = "fizzbuzz()">
<div id = "div1">
<h1>Fizz Buzz</h1>
</div>
</body>
答案 0 :(得分:4)
在您的代码中,prompt()
返回一个字符串。 Javascript将评估此行:
for(var i=1; i<num+1; i++){
以num
作为字符串。即num + 1变为“20”+“1”(注意引号),即“201”。然后以数字方式对比较进行评估,因此你的循环运行的时间比它应该延长十倍。
在修订后的版本中i < num
会以数字方式进行评估,因此循环运行的时间正确。
您可以强制num
成为这样的数字:
var num = Number(prompt("Please enter a number between 1 and 100: "));
num
现在是一个数字,所以20 + 1 = 21(注意 - 没有引号),你的循环的两个版本都应该正常运行
答案 1 :(得分:0)
你需要这样做:
var num = parseInt(prompt("Please enter a number between 1 and 100: "), 0);
prompt
会返回一个字符串,因此,如果您输入20
,num+1
就是字符串"201"
,而不是数字21
。
答案 2 :(得分:0)
prompt()
返回一个字符串。
简单地使用+prompt()
代替。这应该是一个数字。更新了code demo。
答案 3 :(得分:0)
此处num
是一个字符串,您必须使用parseInt
将其转换为int
for(var i=1; i<parseInt(num)+1; i++){
}