为了学习(我非常初学者),我正在尝试编写一个函数,根据三个用户输入变量生成随机数。用户可以输入要生成的随机数
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”并执行我的代码。但它似乎并没有这样做。我非常困惑......会喜欢一些帮助。数组是否可能将数字存储为字符串而不是整数,这就是问题?
答案 0 :(得分:0)
你的if语句由于强制而无效。
===-1
数组doNotInclude
包含字符串,但random
是整数值,===
始终比较值并键入两者。
您应该使用==
。或者两种类型相同。
答案 1 :(得分:0)
HTML
Count: <input id="countInput" value="10" /><br />
Do not include: <input id="doNotIncludeInput" value="0,1,2,3,4,5" /><br />
Highest Number: <input id="highestNumberInput" value="10" /><br />
<br />
<button type="button" id="button">Click to Run!</button><br />
<br />
Results:<br />
<div id="text1"></div>
的js
document.getElementById("button").onclick = function() {
var currentCount = 0;
var randomNumbers = [];
var count = parseInt(document.getElementById("countInput").value);
var doNotIncludeInput = document.getElementById("doNotIncludeInput").value.split(",");
var highestNumberInput = parseInt(document.getElementById("highestNumberInput").value);
var resultsElement = document.getElementById("text1");
resultsElement.innerHTML = "";
while(currentCount < count) {
var random = -1;
while(random === -1){
random = Math.floor((Math.random()) * (highestNumberInput + 1));
for(var i in doNotIncludeInput) {
if(parseInt(doNotIncludeInput[i]) === random){
random = -1;
}
}
if(random !== -1){
randomNumbers.push(random);
}
}
currentCount += 1;
}
resultsElement.innerHTML = randomNumbers.join(', ');
}