最近开始研究Javascript,试图读出 Javascript:The Definitive Guide 和 Eloquent Javascript ,同时我自己去尝试实验以便真正实现在我的记忆中蚀刻它们。我想了解算术运算和条件语句的好方法,我会围绕每个Math运算符构建一系列小游戏,并从添加开始。
function beginAdditionChallenge() {
var x = Math.ceiling(Math.random()*100);
alert(x);
for (var i = 0; i < 3; i++) {
var a = Number(prompt("Provide the first addend.", ""));
var b = Number(prompt("Provide the second addend.", ""));
if (a + b === x) {
alert("Well done!");
break;
}
else if (a + b !== x && i < 3) {
alert("Please try again.");
}
else {
alert("Fail.");
}
}
}
function initChallenge() {
var button = document.getElementById("challengeButton");
button.addEventListener("click", beginAdditionChallenge);
}
window.addEventListener("load", initChallenge);
到目前为止,您可以在JSFiddle here上看到整个事情。想法是单击按钮会生成1到100之间的随机数,将其显示给用户,然后提示他们提供两个加数,给他们3次尝试。如果这些加数的总和等于RNG数,则它祝贺用户并结束程序。如果他们没有提供合适的加数,那么循环会提示他们再试一次,直到他们达到3次尝试,此时程序会瞄准他们并结束。
我知道事件监听器不是故障点,因为当我更改beginAdditionChallenge以简单地显示测试警报时,它可以工作,但我不知道我创建的循环到底出了什么问题。
答案 0 :(得分:1)
你做得对。但是,Math.ceiling
不是一个功能,应该是Math.ceil
。此外,您的代码(在jsfiddle中)应设置为wrap in head
。为什么?因为现在您在页面加载时调用initChallenge
。但是,在您的jsfiddle示例中,代码运行onLoad
,因此永远不会调用load事件。基本上,您在页面加载后添加了加载事件。
编辑:此外,你有一个最多三个的for循环。因此
else if (a + b !== x && i < 3) {
alert("Please try again.");
}
应该是
else if (a + b !== x && i < 2) {
alert("Please try again.");
}
因为当i === 2
时,用户的最后一次机会已经结束。
答案 1 :(得分:0)
一切都很好。只需改变: -
var x = Math.ceiling(Math.random()*100);
来: -
var x = Math.ceil(Math.random()*100);