当我在循环中调用此语句4次时,它会给我重复的随机数。
var a = (parseInt(Math.random() * 4))+1
例如,有时候它会给我1,3,2,4(罚款!!),但有时会产生1,3,1,4等等。
我如何确保当我的循环运行4次时,我每次都会得到唯一的设置
答案 0 :(得分:4)
改组预先填充的阵列将是一个很好的解决方案:
// shuffle function taken from here
// http://stackoverflow.com/a/2450976/603003
alert( shuffle( [1,2,3,4] ) );
另一个apporach包含以下功能:
function gen4Numbers() {
var numbers = [];
while (numbers.length < 4) {
var newNr = (parseInt(Math.random() * 4))+1;
if (numbers.indexOf(newNr) == -1) {
numbers.push(newNr);
}
}
return numbers;
}
alert(gen4Numbers());
应该警告您,此代码很可能会永远循环。
答案 1 :(得分:4)
你需要缓冲你的答案,但更好的方法是预先计算它们。
因此,例如,您想要1到4的随机整数并且是唯一的,这与从1到4的值的数组随机排序相同
一般情况:
// numbers of values
var n = 10;
// make initially sorted array
var arr = [];
for (var i=1; i<=n; ++i) { arr.push(i); }
// randomly sort the array
arr.sort(function () { return Math.random() - 0.5; });
现在,arr将以随机顺序包含1到10之间的所有数字,因此如果您想要该范围内的4个唯一随机数,则它们位于arr [0],arr [1] arr [2],arr [3] ]
制作n = 4
并解决问题
答案 2 :(得分:2)
我正在使用时间
var d = new Date();
var uniqId = d.getTime();
答案 3 :(得分:1)
将数字存储在一个数组中,每次都检查之前是否生成了数字。
如果你没有产生很多数字,这是非常快的,因为你没有
循环很多。
=============编辑1 =============
但是,如果你必须生成大量随机数,我建议放一个
数组所有数字,拖曳它,然后取你需要的前n个数字。
阵列改组可以在这里找到:
http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
答案 4 :(得分:0)
如果你想要一组庞大的数字,你应该存储每个不同的数字,然后在循环的每次迭代中选择一个。
var maxnB = 1000; // or 4
var list = [];
for (var i = 1; i <= maxNb; ++i) // store all number in a list [1, 2, 3, ... , maxNb]
list.push(i);
while (list.length > 0)
{
var pos = (parseInt(Math.random() * list.length))
var myNumber = list[pos]; // get your unique random number
list[pos] = list[list.length - 1]; // replace the number used with last number
list.pop(); //remove last number, decrease list.length by 1
// do something with your new number
}
这样做,你有永远循环的概率,如果pop()
方法和[]
运算符具有ao(1)时间复杂度访问权限,它将改善时间处理,而不是寻找每次有一个要检查的新号码时,在缓冲区列表中输入您的号码。
答案 5 :(得分:0)
这样做。
for( i = 0; i< 4; i++)
{
num = Math.floor((Math.random() * 3) + 1);
if(randomArray.indexOf(num)<0)
{
randomArray[i]=num;
}//endif
else
{
i=i-1;
}//endElse
}//endForLoop
基本上,如果一个数字被重复 - 在位置3处(randomArray [3]具有与randomArray [atAnotherIndex]相同的值),你的计数器将返回3并再次执行math.random,直到达到唯一值。 / p>