2014-11-04 31 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