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

Reply via email to