A simple way:

Put all the candidate numbers in a list (in this case, 1 to 40). Then pick
randomly from that array, one at the time, and make sure you remove that
number from the candidates list, so you can't have duplicates.

In code (untested):

function getRandomList():Array {
    var min:Number = 1;
    var max:Number = 40;
    var numItems:Number = 10;
    var candidates:Array = [];
    // fill up the candidates list with the "eligible" numbers
    for(var i:Number = min; i <= max; i++) {
        candidates.push(i);
    }

    var list:Array = [];
    var idx:Number = 0;
    var selectedNumber:Number = 0;
    for(i = 0; i < numItems; i++) {
        // get a number from the candidates list, randomly. Add it to the
result and remove it from the candidates list (using splice)
        idx =  Math.floor(Math.random() * candidates.length);
        selectedNumber = candidates.splice(idx,1)[0];
        list.push(selectedNumber);
    }
    return list;
}


Cheers
Juan Pablo Califano

2010/5/5 Alan Neilsen <aneil...@gotafe.vic.edu.au>

> I am working in ActionScript 2. I want to create a quiz in which 10
> questions are randomly selected from a block of 40 questions. I found the
> following code, but I can't work out how to stop it doubling up the
> questions.
>
> function randRange(min:Number, max:Number):Number {
>    var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) +
> min;
>    return randomNum;
> }
> for (var i = 0; i < 10; i++) {
>    var n:Number = randRange(1, 40)
>    trace(n);
> }
>
> When I run this it outputs a list of numbers like 40  13  17  12  27  12  3
>  17  9  15 which means some questions (in this case 17 and 12) will appear
> twice in my quiz.
> Bearing in mind that I am a bit of an ActionScript dummy, can anybody
> suggest a way to modify the above script to prevent the same number being
> generated more than once.
>
> This message is for the named person’s use only. It may contain
> confidential, proprietary or legally privileged information. No
> confidentiality or privilege is waived or; lost by any mistransmission. If
> you receive this message in error, please immediately delete it and all
> copies of it from your system, destroy any hard copies of it and notify
> the sender. You must not directly or indirectly, use, disclose,
> distribute, print or copy any part of this message if you are not the
> intended recipient. GOULBURN OVENS INSTITUTE OF TAFE and
> any of its subsidiaries each reserve the right to monitor all e-mail
> communications through its networks. Any views expressed in this
> message are those of the individual sender, except where the
> message states otherwise and the sender is authorised to state them
> to be the views of any such entity.
>
>
> #####################################################################################
> This e-mail message has been scanned for Viruses and Content and cleared
> by MailMarshal
>
> #####################################################################################
> _______________________________________________
> 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