我有一个正在制作的抛硬币程序的循环。问题是它似乎提前退出了。看看吧。
$(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/