0

我需要给定集合中的一些随机数。数字的数量和数字本身都必须随机选择。假设数量的范围是 2 到 5,而数字集是 1 到 4。一些可能的结果可能是:
13;334; 42331; ...

min <input type = "number" id = "min_txt" value="2" min="1" />
max <input type = "number" id = "max_txt" value="5" min="1" />
numbers <input type = "number" id = "numbers_txt" value="4" min="1" max="5" />

<button type="button" onClick="func()">click</button>
<input type = "text" id = "arr_txt" />

<script>
function func(){
    var min = min_txt.value;
    var max = max_txt.value;
    var numbers = numbers_txt.value;
    var arr = [];
    arr_txt.value="";

    // set quantity (e.g. 3)
    var quantity = Math.floor(Math.random() * (max - min + 1)) + min; 

    // actual operation
    for (var i = 0; i < quantity; i++) {
        var number = Math.floor((Math.random() * numbers) + 1);
        arr.push(number);
    }

    // output the result
    for (var i = 0; i < arr.length; i++) {
       arr_txt.value=arr_txt.value+arr[i];
    }
}
</script>

问题是,我几乎没有得到我期望的结果。有时我会用上面的参数得到类似 31112342144313124134342131213224 的东西。

4

2 回答 2

2

min是一个字符串。当您通过添加Math.floor(Math.random() * (max - min + 1))and计算数量时min,它执行字符串连接,而不是添加。因此,作为数量的结果,您最终可能会得到类似“12”或“22”或“52”的结果。

您可以通过确保您的数值实际上是数字来防止这种情况:

var min = parseInt(min_txt.value);
var max = parseInt(max_txt.value);
var numbers = parseInt(numbers_txt.value);
于 2013-10-01T11:44:23.857 回答
0
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function getRandomArray(min, max, minCount, maxCount) {
    var count = getRandom(minCount, maxCount);
    var arr = [];

    while (count-- > 0)
        arr.push(getRandom(min, max));

    return arr;
}

将上述函数与正确的 int 参数一起使用

于 2013-10-01T11:47:05.343 回答