Avatar billede dennism Nybegynder
07. oktober 2004 - 08:39 Der er 4 kommentarer og
1 løsning

JavaScript: Random; kun samme tal én gang.

Jeg har et program, hvor jeg indtaster ét antal tal, som jeg ønsker at trække. Når tallet er indtastet, kører jeg følgende:
Math.floor(Math.random()*28+1)

Denne funktion vælger ét tal mellem 0 og 28..
Men med dette, kan det samme tal sagtens blive trukket flere gange. Hvad kan jeg gøre, for at forhindre dette? Hvordan plejer I at gøre?
Avatar billede anhansen Nybegynder
07. oktober 2004 - 08:53 #1
Lav en vector eller et array med det antal du ønsker at trække.
Hver gang du så har udtrukket et tal - løber du arrayet igennem og ser om det er udtrukket i forvejen - hvis ikke så gem det nye tal i arrayet også.

På den måde bliver du ved til du har trykket alle tal.

sådan ville jeg lige umiddelbart gøre det.
Avatar billede dennism Nybegynder
07. oktober 2004 - 08:55 #2
Jeg har følgende:

function draw() {
    int=new Array(num_inputstudents.value)


                for (n=1; n<=num_inputstudents.value ; n++) {
                    student_num=Math.floor(Math.random()*28+1);
                    text_draw.value=text_draw.value+student_num+"\r\n";
                }

HVordan får jeg den til at teste om tallet er i array'en, inden det bliver gemt?
Du skal nok få 60 point hvis du kan hjælpe.
Avatar billede anhansen Nybegynder
07. oktober 2004 - 09:00 #3
Jeg ville lave en løkke. Undskyld mit lidt rustne java - men håber det er nogenlunde korrekt... :-)

function draw() {
    int=new Array(num_inputstudents.value)

                Vector list = new Vector();
             
                for (n=1; n<=num_inputstudents.value ; n++) {
                    student_num=Math.floor(Math.random()*28+1);
                    boolean fundet = false;
                    int i = 0;
                    while(!fundet && i <list.length())
                    {
                      if(list[i] == student_num)
                          fundet = true;

                      i++;
                    }
                    if(!fundet)
                      list.add(student_num);
                    text_draw.value=text_draw.value+student_num+"\r\n";
                }


Giver det mening?
Avatar billede limemedia Nybegynder
07. oktober 2004 - 09:33 #4
<script language="JavaScript" type="text/javascript">
<!--
    var maxvals = 28;
    var vals = new Array()
   
    for (var i=0; i<maxvals; i++) vals[i] = i+1;

    function unique_random() {
        var index = Math.floor(Math.random()*vals.length);
        var out = vals[index];
        deleted = vals.splice(index,1);
        return out;
    }

    for (var i=0; i<35; i++) {
        document.write(unique_random() + "<br>");
    }
-->
</script>

Ref : http://www.w3schools.com/js/js_obj_array.asp
og : http://www.w3schools.com/js/tryit.asp?filename=tryjs_array_splice
Avatar billede dennism Nybegynder
08. oktober 2004 - 16:25 #5
Jeg klarede det selv, med et meget mere simpelt script (én for-sætning indeholdende en if-sætning)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester