具有有限尝试的简单算术挑战函数

时间:2014-06-14 20:15:22

标签: javascript loops if-statement for-loop

最近开始研究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以简单地显示测试警报时,它可以工作,但我不知道我创建的循环到底出了什么问题。

2 个答案:

答案 0 :(得分:1)

你做得对。但是,Math.ceiling不是一个功能,应该是Math.ceil。此外,您的代码(在jsfiddle中)应设置为wrap in head。为什么?因为现在您在页面加载时调用initChallenge。但是,在您的jsfiddle示例中,代码运行onLoad,因此永远不会调用load事件。基本上,您在页面加载后添加了加载事件。

http://jsfiddle.net/rNn32/

编辑:此外,你有一个最多三个的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);