【发布时间】:2015-06-27 14:56:29
【问题描述】:
为了学习(我是一个初学者),我正在尝试编写一个函数,该函数将根据三个用户输入的变量生成随机数。用户可以输入生成多少个随机数
var count = 10;
要避免生成哪些数字(用逗号分隔)
var doNotInclude = (document.getElementById("doNotIncludeInput").value).split(",");
以及可能的最高数字应该是多少
var highestNumber = 10;
理论上,如果用户为 doNotInclude 变量输入“1,2”,该函数应该创建一个包含这两个数字的数组,然后每次生成一个随机数时,对照该数组检查该数字是否它生成的数字是它不应该生成的数字之一。
不幸的是,它不起作用。它创建了我通过console.log()验证的数组,但它仍然会生成它不应该生成的数字。这是完整的脚本:
document.getElementById("button").onclick = function() {
var total = 0,
average = 0,
random = 0,
count = parseInt(document.getElementById("countInput").value),
doNotInclude = document.getElementById("doNotIncludeInput").value).split(","),
highestNumber = parseInt(document.getElementById("highestNumberInput").value);
document.getElementById("text1").innerHTML = "";
for (var i = 0; i < count; i++) {
var proceed = false;
for (random = Math.floor(((Math.random()) * (highestNumber + 1))); proceed == false;) {
if (doNotInclude.indexOf(random)===-1) {
proceed = true;
}
}
document.getElementById("text1").innerHTML = document.getElementById("text1").innerHTML + "<br />" + (i + 1) + ". " + random;
total = total + random;
if (i == (count - 1)) {
total / count;
document.getElementById("text").innerHTML = "Mean average = " + (Math.round(total / count));
}
}
}
不工作的部分
if (doNotInclude.indexOf(random)===-1) {
proceed = true;
}
indexOf 函数,是我在这里读到的,但我想我并不完全理解它。据我了解,它应该检查任何数组值是否与随机变量相同,如果不是,则返回“-1”并执行我的代码。不过,它似乎没有这样做。我非常困惑......希望得到一些帮助。数组是否有可能将数字存储为字符串而不是整数,这就是问题所在?
【问题讨论】:
-
proceed用于不断生成随机数的循环,直到它从数组中得到一个不匹配的数字。 for 循环设置为一直持续到proceed == false。如果循环发现生成的数字与数组中的任何内容都不匹配,它将设置proceed = true。
标签: javascript arrays indexof