如何使随机数生成器不生成两次相同的数字

时间:2014-01-26 23:21:16

标签: javascript random numbers

我对编程很新,我一直在研究找到四个随机div并为它们添加一个类的项目 - 我唯一的问题是因为我的随机生成器经常生成相同的数字,程序通常不会将类附加到四个随机div,但很可能是三个甚至两个。所以我的问题是,如果可能的话,我如何设置我的程序只生成四个不同的数字。 我听说过费雪耶茨的尝试,但我没有完全理解。 这是我的JS:

for(var i = 4; i>0; i--){
var rand = Math.floor((Math.random()*16)+1);
var array=new Array(); 
array[1] = "one";
array[2] = "two";
array[3] = "three";
array[4] = "four";
array[5] = "five";
array[6] = "six";
array[7] = "seven";
array[8] = "eight";
array[9] = "nine";
array[10] = "ten";
array[11] = "eleven";
array[12] = "twelve";
array[13] = "thirteen";
array[14] = "fourteen";
array[15] = "fifteen";
array[16] = "sixteen";
$('#'+array[rand]).addClass('bomb');
}

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

一些注释:首先,你应该在for循环之外初始化你的数组,这样它只会执行一次。另外,正如@zerkms指出的那样,你应该在索引0而不是1开始你的数组。为了防止重复一个数字,你可以简单地删除你已经从数组中选择的那个。以下是如何执行此操作的示例:

var array=new Array(); 
array[0] = "one";
array[1] = "two";
array[2] = "three";
array[3] = "four";
array[4] = "five";
array[5] = "six";
array[6] = "seven";
array[7] = "eight";
array[8] = "nine";
array[9] = "ten";
array[10] = "eleven";
array[11] = "twelve";
array[12] = "thirteen";
array[13] = "fourteen";
array[14] = "fifteen";
array[15] = "sixteen";
for(var i = 4; i>0; i--){
    var rand = Math.floor((Math.random()*array.length));
    $('#'+array[rand]).addClass('bomb');
    array.splice(rand,1);
}

希望这有帮助!

编辑:我删除了导致错误的不必要的while循环。

答案 1 :(得分:0)

这是您的主题问题的示例(从1到13)

for (var i = 0, ar = []; i < 14; i++) { ar[i] = i; }
console.log( ar.sort(function () { return Math.random() - 0.5; }) );

输出:

[1, 2, 0, 3, 5, 6, 13, 4, 8, 9, 12, 10, 7, 11] ->> run first time
[3, 7, 4, 10, 1, 9, 11, 8, 13, 12, 2, 5, 0, 6] ->> runt second time
etc..

答案 2 :(得分:0)

这可以通过首先对数组进行混洗来实现,如an earlier answer中所述。

kfy(array);
for (var i = 0; i < 4; ++i) {
    $('#' + array[i]).addClass('bomb');
}