选择随机并删除AS3

时间:2014-03-07 12:10:40

标签: actionscript-3 random

我在学校有这个项目。我们将创建一个应用程序,在1-34之间挑选7个随机数,不重复数字,对它们进行排序并在文本框中显示它们。我不知道从哪里开始。

3 个答案:

答案 0 :(得分:1)

为了生成数字,你需要Math.random来排序Array.sort,以显示TextField:

var len:uint = 7;
var min:uint = 1;
var max:uint = 34;
var filled:uint;
var result:Array = [];
var random:int;

//Filling collection with random numbers
while (filled < len) {
    random = min + Math.random() * (max - min);
    if (result.indexOf(random) == -1) {
        result.push(random);
        filled++;
    }
}

//Sorting your collection, don't read further, if you want to do something yourself ;)
result.sort(Array.NUMERIC);

//Display result
var textField:TextField = new TextField();
textField.autoSize = TextFieldAutoSize.LEFT;
textField.text = result.toString();
addChild(textField);

结果之一:

 1,8,13,16,20,26,32  

答案 1 :(得分:0)

有很多方法可以做到这一点。填充一个独特的随机数组的最快方法是用数字范围填充数组,在你的情况下是1-34的数组,然后将一个max变量设置为数组的长度-1(对于数组的最后一个索引)。然后在max变量大于0 ( while( max > 0 ) )时实现while循环,将数组的随机索引与当前最大位置交换。我明白这可能听起来很混乱,所以这里有一个例子:

//create our array of numbers, you could do this in a for loop or 
//set it as I have ( which saves you some performance )
var numbers = [ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34 ];

var max:int = numbers.length-1; //set our max to the array length - 1
var randomIndex:int; //create the randomIndex variable
while( max > 0 ) {
    randomIndex = Math.random() * max; //pick a random index
    numbers[randomIndex] ^= numbers[max]; //swap the random index with our max
    numbers[max] ^= numbers[randomIndex];
    numbers[randomIndex] ^= numbers[max];
    max--; //decrease the max
}
numbers.length = 7; //set array length to 7 elements so you have 7 random numbers

这样做可以保证数组的每个元素都是唯一的并且可以交换。

这是在一定范围内随机生成一组唯一数字的最快且可以说是最简单的方法。它也被称为Fisher Yates Shuffle

然后,您可以使用以下数字对数组进行排序:numbers.sort( Array.NUMERIC )

最后要将其添加到TextField,您需要创建一个新的TextField,并使用text格式的String属性值设置:

var textField:TextField = new TextField();
textField.text = numbers.toString();
addChild( textField );

以下是有关TextFields的一些文档,可帮助您了解:

TextField AS3.0

答案 2 :(得分:0)

将此功能放在任何地方

function getRandomNum(startNum, endNum, totalNumberGet):Array{
    var numbersArray:Array = [];
    var return:Array = [];

    for(var i:int = startNum; i <= endNum; i++){
        numbersArray.push(i);
    }
    for(var ii:int = 0; ii < totalNumberGet; ii++){
        var random:int = Math.random() * numbersArray.length;
        return.push(numbersArray[ii]);
        numbersArray.splice(ii,1);
    }
    result.sort(Array.NUMERIC);
    return result;
}

要运行它,请致电var myResult:Array = getRandomNum(1,43,7);