2013-10-01 61 views
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的東西。

+0

使過濾器在你的arr.lenth環高達一些範圍長度 –

回答

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); 
+0

謝謝,它現在的作品! – user1170330

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參數上述功能