0

特定のセットからいくつかの乱数が必要です。数字の量と数字自体の両方をランダムに選択する必要があります。数量の範囲が 2 から 5 で、一連の数値が 1 から 4 であるとします。考えられる結果は次のとおり
です。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))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 に答える