一组中的随机数

时间:2013-10-01 11:34:46

标签: javascript algorithm random numbers

我需要一些给定集合中的随机数字。必须随机选择数字的数量和数字。 假设数量的范围是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的信息。

2 个答案:

答案 0 :(得分:2)

min是一个字符串。通过添加Math.floor(Math.random() * (max - min + 1))min来计算数量时,它会执行字符串连接,而不是添加。因此,数量可能会导致“12”或“22”或“52”之类的结果。

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

var min = parseInt(min_txt.value);
var max = parseInt(max_txt.value);
var numbers = parseInt(numbers_txt.value);

答案 1 :(得分: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参数一起使用