Javascript 提前退出循环

标签 javascript loops for-loop

我有一个正在制作的抛硬币程序的循环。问题是它似乎提前退出了。看看吧。

$(function() {
    $('#rollDice').click(function() {

        var e = document.getElementById("diceSides");
        var diceSides = e.options[e.selectedIndex].text;
        var diceRolls = document.getElementById('rollCount').value;

        if (diceRolls.match(/^[\d]*$/ )) {      
            if (diceRolls == "")  {
                alert ("Please fill out all forms then try again.");

            } else {

                $('#diceRollContainer').slideDown('slow');

                for (i=0;i<diceRolls;i++) {
                    var randNum = Math.floor(Math.random()*diceSides)+1;
                    var rolls = ("You rolled a " + diceSides + " sided die " + diceRolls + " times, and got the numbers ");

                    rollMinOne = rolls - 1;
                    if (i == rollMinOne) {
                        var rolls = (rolls + randNum + ".");
                    }
                    var rolls = (rolls + randNum + ", ");

                }
                alert (rolls);
            }
        } else {
            alert ("Make sure you only enter numbers and no spaces, then try again.");
        }
    });
});

问题在于,程序在 for 循环似乎完成之前就发出警报。为什么要这样做?

最佳答案

该代码中有几个错误,但解释您所看到的行为的一个错误是每次循环时都将 rolls 的值重置为初始字符串。

一旦你将该行移出,你就会得到一个更接近的值,但你也是从 rolls 计算 rollsMinOne,而不是 diceRolls,如您所愿(这就是为什么选择好名字如此重要),这意味着 if 语句永远不会为真(因为字符串减去数字是值 NaN“Not a Number”,它不等于到任何东西[甚至它本身!])。

那么唯一的功能性(而不是样式或设计)问题是,即使您已经添加了句点,您仍要在末尾附加一个逗号。

把它们放在一起:

    var rolls = ("You rolled a " + diceSides + " sided die " + diceRolls + " times, and got the numbers ");
    for (i=0;i<diceRolls;i++) {
        var randNum = Math.floor(Math.random()*diceSides)+1;

        rollMinOne = diceRolls - 1;
        if (i == rollMinOne) {
            rolls = (rolls + randNum + ".");
        } else {
            rolls = (rolls + randNum + ", ");
        }

尽管正如其他答案提到的那样,有更简单、更快的方法可以获得相同的结果,但我认为理解代码不起作用的原因很重要。

关于Javascript 提前退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10116883/

相关文章:

javascript - 如何在光滑的画廊中水平和垂直居中图像(+fancybox)

javascript - 如何在启动 funcC() 之前执行未定义数量的 funcA() 和 funcB()?

java - Java 类中不存在循环

java - 边框布局循环。 J面板/Swing

Java 迭代器与 for 循环

javascript - 增加图像映射点击的变量数

javascript - 如何防止按钮出现悬停

Python 逻辑 - 使用 for 循环减少 1 的集合来创建三角形

python - 在 Pandas 中获得滚动平均值的最快方法?

来自汇编的 C 循环代码