【问题标题】:Checking random number variable against Javascript array values for match, not working根据 Javascript 数组值检查随机数变量是否匹配,不起作用
【发布时间】: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


【解决方案1】:

由于强制,您的 if 语句不起作用。

===-1

数组doNotInclude 包含字符串,但random 是一个整数值,=== 总是比较值和类型。

您应该使用==。或者两种类型相同。

【讨论】:

  • 我只是找到了一种将我的数组转换为整数的方法,但现在我运行它时似乎循环变得无限。我不知道为什么......
  • 您的问题是关于某个特定部分无法正常工作。为什么它进入无限循环,是一个完全不同的问题。我猜你需要调试你的代码。
  • @EricDavidSator - 这就是答案。 stackoverflow.com/a/2270344/862479 中回答了您获得无限循环的原因
【解决方案2】:

Try this Fiddle

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(', ');
}

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2019-02-23
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多