THANK YOU AGAIN!!!

2011/1/13 Juan Pablo Califano <califa010.flashcod...@gmail.com>:
> PS:
>
> I mentioned that a random sort was not the best approach.
>
> Here's a better way to randomize an array:
>
> public static function shuffle(array:Array):void {
>    var tmp:*;
>    var cur:int;
>    var top:int;
>
>    cur = top = array.length;
>    if(top) {
>        while(--top) {
>            cur = Math.floor(Math.random() * (top + 1));
>            tmp = array[cur];
>            array[cur] = array[top];
>            array[top] = tmp;
>        }
>    }
> }
>
>
> 2011/1/13 Juan Pablo Califano <califa010.flashcod...@gmail.com>
>
>> Try this:
>>
>>  function uniqueRandomInt(min:Number, max:Number, n:Number) {
>>  var a:Array = [];
>>  var i:Number = min;
>>  while (a.push(i++)<max);
>>  a.sort(function (a:Number, b:Number) {
>>   return Math.floor(Math.random()*3)-1;
>>
>>  });
>>  return a.slice(0,n);
>> }
>>
>> Although a random sort is not the best means to randomize an array, it
>> should work reasonably.
>>
>> The problem with your code was this line:
>>
>> Math.random()*2-1;
>>
>> Your sort function should return 3 diferent values (n < 1, n = 0 and; n >
>> 0) as evenly distributed as possible. Math.random gives you a number that
>> is great or equal to 0 and *less* than 1. It will not give you 1 back
>> (0.999999999, but not 1).
>>
>> So if you do:
>>
>> Math.random() * 2
>>
>> You'll either get 0 or 1 (with decimals); it's not posibble to get 2. You
>> should instead use 3 as the multiplier and floor it; the result should be 0,
>> 1 or 2 (this will have as much randomness as Math.random provides). Now
>> substract 1 and you'll get -1, 0 or 1, which is what you want for your sort
>> function.
>>
>>
>> Cheers
>> Juan Pablo Califano
>> 2011/1/13 natalia Vikhtinskaya <natavi.m...@gmail.com>
>>
>> Hi
>>> I use function that creates unique array
>>>
>>> function uniqueRandomInt(min:Number, max:Number, n:Number) {
>>>                        var a:Array = [];
>>>                        var i:Number = min;
>>>                        while (a.push(i++)<max) {
>>>                                ;
>>>                        }
>>>                        a.sort(function (a:Number, b:Number) { return
>>> Math.random()*2-1;});
>>>                        return a.slice(0, n);
>>>                }
>>>
>>> It works fine for AS2. But for AS3 it gives always the same result
>>> if I ask
>>> uniqueRandomInt(1, 6, 6); I always get 4,2,3,1,5,6
>>>
>>> What is wrong in this code for AS3?
>>>
>>> Thank you in andvance.
>>> _______________________________________________
>>> Flashcoders mailing list
>>> Flashcoders@chattyfig.figleaf.com
>>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>>
>>
>>
> _______________________________________________
> Flashcoders mailing list
> Flashcoders@chattyfig.figleaf.com
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>

_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to