我有一个随机数变量定义如下
var rannum:Number = Math.floor(Math.random()*50+1);
然后我有一个触发器,每次点击一个按钮时都会调用一个新的随机数
ranbtn.addEventListener(MouseEvent.CLICK, reran);
function reran (event:MouseEvent):void
{
rannum = Math.floor(Math.random()*50+1);
}
我想阻止选择相同的随机数,直到所有数字都被选中然后可能重新开始? 我发现了一些像这样的线程,但没有一个是我需要的
答案 0 :(得分:3)
您需要创建一个可能值的数组,每次从数组中检索随机索引以使用其中一个值时,都会将其从数组中删除。这里有一个简单的javascript示例。
var uniqueRandoms = [];
var numRandoms = 50;
function makeUniqueRandom() {
// refill the array if needed
if (!uniqueRandoms.length) {
for (var i = 0; i < numRandoms; i++) {
uniqueRandoms.push(i);
}
}
var index = Math.floor(Math.random() * uniqueRandoms.length);
var val = uniqueRandoms[index];
// now remove that value from the array
uniqueRandoms.splice(index, 1);
return val;
}
我找到了另一个选项,你可以声明一个整数数组:[1,2,3,4 ... 50]并随机排序。
var sorted:Array = [];
for(var i:int = 0; i < 50; i++){
sorted.push(i);
}
//I'm making a copy of sorted in unsorted
var unsorted:Array = sorted.slice();
//Randomly sort
while(sorted.join() == unsorted.join()){
unsorted.sort(function (a:int, b:int):int { return Math.random() > .5 ? -1 : 1; });
}
答案 1 :(得分:0)
如果您获得了一个选定的数字,您可以添加一个,直到它没有被选中。
答案 2 :(得分:0)
代码:
function createRangeOfIntegers(from:int, to:int):Vector.<int> {
if (from >= to) throw new ArgumentError("Invalid arguments");
var integers:Vector.<int> = new <int>[];
for (var i:int = from; i <= to; i++) {
integers.push(i);
}
return integers;
}
function getRandomInteger(integers:Vector.<int>):int {
var index:int = Math.random() * integers.length;
var integer:int = integers.splice(index, 1)[0];
return integer;
}
示例:
// create all the possible integers
var integers:Vector.<int> = createRangeOfIntegers(1, 50);
// select a random integer
var random:int = getRandomInteger(integers);
// When you've selected all integers you can start over
if (integers.length == 0)
integers = createRangeOfIntegers(1, 50);