Toon posts:

[JS] geen dubbele waarden

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik wil 5 verschillende waarden genereren, hiervoor heb ik een random script en een for loop:
JavaScript:
1
2
3
4
5
6
7
8
function rand(nr) {
    return (Math.floor(Math.random() * nr + 1));
}

for (i=0;i<5;i++) {
    thenewx = rand(500);
    document.write(thenewx+'<br>');
}

Dat gaat goed. Alleen nu wil ik dat de waarden allemaal 50 verschillen van elkaar. Dus kwam ik op het idee om een array te maken, waarin de waarden worden opgeslagen. Elke keer voor hij een waarde opslaat, check hij of de waarde inderdaad 50 verschilt van alle andere opgeslagen waarden. Zo nee, dan moet hij een nieuw getal genereren, zo ja, dan gaat hij verder:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function rand(nr) {
    return (Math.floor(Math.random() * nr + 1));
}

arrayx = new Array();

for (i=0;i<5;i++) {
    ok = 'no';
    while (ok == 'no') {
        thenewx = rand(500);        
        for (j=0;j<=arrayx.length; j++) {       
            thisx = arrayx[j];          
            if (thenewx > (thisx + 50) || thenewx < (thisx - 50)) {
                ok = 'yes';
                j = arrayx.length;
                arrayx[i] = thenewx;
                document.write(thenewx+'<br>');
            }
        }       
    }   
}

Alleen als ik deze code uit wil voeren, loopt mijn browser vast. Hij blijft dus ergens in een loop hangen denk ik, maar waar? Ik vermoed bij de laatste if statement. Of wat doe ik fout?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Heb je dit al eens gelezen? Debuggen: Hoe doe ik dat?
Met een paar alertjes op strategische plekken moet dit prima te debuggen zijn ;)

Waarom gebruik je eigenlijk 'no' en 'yes' en niet gewoon true en false :?

[ Voor 15% gewijzigd door RobIII op 24-04-2007 13:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarom vul je niet gewoon een array met het aantal random waardes wat je wil hebben, check je de array op dubbelen, en vermenigvuldig je uiteindelijk alle getallen in de array met 50?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Icelus
  • Registratie: Januari 2004
  • Niet online
RobIII schreef op dinsdag 24 april 2007 @ 13:14:
Heb je dit al eens gelezen? Debuggen: Hoe doe ik dat?
Met een paar alertjes op strategische plekken moet dit prima te debuggen zijn ;)
Of installeer FireBug waarmee je stap-voor-stap door de code kan lopen.

Developer Accused Of Unreadable Code Refuses To Comment


  • André
  • Registratie: Maart 2002
  • Laatst online: 27-11 10:04

André

Analytics dude

Je moet eerst de array doorlopen om te matchen met alle bestaande waardes. Als dat gebeurd is kun je pas het nieuwe getal toevoegen ;)
JavaScript:
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
function rand(nr)
{
  return (Math.floor(Math.random() * nr + 1));
}

var arrayx = new Array();

for (i=0;i<5;i++)
{
  var ok = false;
  while (ok == false)
  {
    thenewx = rand(500);        
    
    ok = true;
    for (j = 0; j <= arrayx.length; j++)
    {        
      thisx = arrayx[j];            
      if (thenewx < (thisx + 50) && thenewx > (thisx - 50))
      {
        ok = false;
      }
    }
    
    if (ok == true)
    {
      arrayx[i] = thenewx;
      document.write(thenewx + '<br>');
    }
  }    
}