2014-11-04 30 views
0

我想找到100到1000之間的10個隨機數,如果有任何數字是相等的,那麼我需要讓電腦選擇一個不同的隨機數。有誰知道如何做到這一點?如何生成不相等的隨機數

<script type="text/javascript"> 
     var numbers=[]; 
     var max=110; 
     var min=100; 
     numbers [1]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [2]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [3]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [4]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [5]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [6]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [7]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [8]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [9]= Math.floor(Math.random() * (max - min + 1)) + min; 
     numbers [10]= Math.floor(Math.random() * (max - min + 1)) + min; 


    do (numbers[2]); 

      while (numbers[1]===numbers[2]); 
    do (numbers[3]); 

      while (numbers[1] == numbers[3])  
      (numbers[2] == numbers[3]); 


     for (i in numbers){ 
      document.writeln("<br>"+numbers[i]); 
     } 
    </script> 

回答

1

使用此代碼:

var numbers = []; 
var max = 110; 
var min = 100; 

while (numbers.length != 10) { 
    var number = Math.floor(Math.random() * (max - min + 1)) + min; 

    var exists = false; 
    for (var i = 0; i < numbers.length; i++) { 
     if (number == numbers[i]) 
      exists = true; 
    } 

    if (!exists) 
     numbers.push(number); 
} 

console.log(numbers); 

jsfiddle

2

您可以使用類似

<script> 
    var foo = {} 

    while (Object.keys(foo).length < 10) { 
     foo[Math.floor(Math.random() * (max - min + 1)) + min] = true; 
    } 

    var numbers = Object.keys(foo); 
</script> 
+0

該使用對象來模擬一組,看到http://www.javascriptexamples.org/2011/01/17/how -to-implement -a-set-in-javascript/ – user3557327 2014-11-04 18:12:18

2
var numbers = []; 
var max = 1000; 
var min = 100; 

while (numbers.length < 10) { 
    var num = Math.floor(Math.random() * (max - min + 1)) + min 
    if(numbers.indexOf(num)!= -1){ 
    numbers.push(num) 
    } 
} 
+0

請注意,使用浮動來創建(非常)分佈很好的隨機數幾乎是不可能的。這並不是說答案是錯的,但是不要用這個來開始抽獎。另請注意'Math.random()'不可能是加密安全的。 – 2015-02-12 21:42:28

+0

呃,不應該最大1000? – 2015-02-12 21:44:03

+0

@MaartenBodewes是的,忽略了。現在修復。 – 2015-02-12 21:45:48

1

您既可以防止檢查重複的數字在你的情況下,他們不要出現十,但我會在這種情況下執行隨機種子,因爲您根本不需要檢查重複項。

您所要做的就是用您的自定義隨機函數替換Math.random,並刪除所有那些不必要的while循環。 實施例:

var seed = Math.random(); 
 
var random = function(){ 
 
    return parseFloat('0.'+Math.sin(++seed).toString().substr(6)); 
 
}; 
 
var r = []; 
 
for(var i=0; i < 10; i++){ 
 
    r[i] = random(); 
 
} 
 
document.body.textContent = r.join(' ');

瞭解更多關於random seeds

+0

這是第一個我看到Math.sin被用於隨機數生成。它對Math.random有多好? – user3557327 2014-11-04 18:26:03

+0

這實際上是一個詭計......我不確切知道[發佈](http://en.wikipedia.org/wiki/Probability_distribution)的行爲如何,但實際上它的功能就像是一種魅力; D !!!如果您嘗試以幾何形式分析它,它似乎是一個非常線性的分佈。 – rafaelcastrocouto 2014-11-04 18:53:21