Hoe voorkom je 'doordraaien' while-loop?
Stel ik wil dat een while-loop een getal laat zien, steeds een ander getal, maar wel ieder getal maar een keer.
Zoiets als:
Het script zal vast niet helemaal foutloos zijn, maar het idee is duidelijk:
Na 10 keer gaat het programma weer op zoek naar een getal dat nog niet getoond is maar kan niets vinden en zal dus maar steeds opnieuw die do...while blijven doen, op zoek naar een niet meer voorhanden zijnd nummer...
Hoe dit te voorkomen?
op een gegeven moment, in dit geval na
Zoiets als:
Code (php)
Het script zal vast niet helemaal foutloos zijn, maar het idee is duidelijk:
Na 10 keer gaat het programma weer op zoek naar een getal dat nog niet getoond is maar kan niets vinden en zal dus maar steeds opnieuw die do...while blijven doen, op zoek naar een niet meer voorhanden zijnd nummer...
Hoe dit te voorkomen?
op een gegeven moment, in dit geval na
Door je verstand te gebruiken en een logische voorwaarde te geven aan een loop?
Bijna altijd als je programma terecht komt in een oneindige lus heb je iets verkeerd gedaan.
Je kunt natuurlijk ook een soort beveiliging inbouwen door een variabele te maken, en die elke nieuwe lus in de loop met 1 te verhogen, als je dan bijvoorbeeld bij de 1000 bent, doe je een break.
Als je een lus met mysql doet om bijvoorbeeld een lijst te vullen moet je ook altijd LIMIT gebruiken in je queries.
Bijna altijd als je programma terecht komt in een oneindige lus heb je iets verkeerd gedaan.
Je kunt natuurlijk ook een soort beveiliging inbouwen door een variabele te maken, en die elke nieuwe lus in de loop met 1 te verhogen, als je dan bijvoorbeeld bij de 1000 bent, doe je een break.
Als je een lus met mysql doet om bijvoorbeeld een lijst te vullen moet je ook altijd LIMIT gebruiken in je queries.
Gewijzigd op 29/04/2014 20:25:48 door jan terhuijzen
Als je niet wilt dat je twee of meer keren hetzelfde getal krijgt dan heb je niets aan de functie rand().
In dat geval moet je met een array werken:
In dat geval moet je met een array werken:
Ah, mn verstand gebruiken. Nooit aan gedacht.
maarhee, dit forum is voor beginners toch?
Wat ik natuurlijk bedoelde was of er zo'n soort functie is zoals dat LIMIT waar jij t over hebt.
Maar dat is blijkbaar niet zo.
bedankt voor je antwoord.
maarhee, dit forum is voor beginners toch?
Wat ik natuurlijk bedoelde was of er zo'n soort functie is zoals dat LIMIT waar jij t over hebt.
Maar dat is blijkbaar niet zo.
bedankt voor je antwoord.
Het is niet zo moelijk hoor, scriptje voor de lotto trekking:
Code (php)
Gewijzigd op 29/04/2014 22:53:49 door Ger van Steenderen
@Ger: Het nadeel van jouw script is dat het lang kan duren voordat de laatste getallen getrokken worden.
Met name als je van die 45 een groter getal maakt, laten we zeggen duizend(en) dan blijft jouw script lang zoeken naar het ene getal dat ontbreekt. Daar heb je in mijn voorbeeld geen last van.
Toevoeging op 29/04/2014 23:23:48:
EDIT
had de < 7 niet gezien
Met name als je van die 45 een groter getal maakt, laten we zeggen duizend(en) dan blijft jouw script lang zoeken naar het ene getal dat ontbreekt. Daar heb je in mijn voorbeeld geen last van.
Toevoeging op 29/04/2014 23:23:48:
EDIT
had de < 7 niet gezien
Gewijzigd op 29/04/2014 23:19:25 door Frank Nietbelangrijk
Ik denk dat franks oplossing, al dan niet aangevuld met een array_slice het efficiëntste is.
Als je het over performance hebt, is het verkeerd gedacht:
Met duizend loops:
Frank: 0.0052769184112549
Ger: 0.0049278736114502
Gaat nergens over natuurlijk, maar toch .....
Met duizend loops:
Frank: 0.0052769184112549
Ger: 0.0049278736114502
Gaat nergens over natuurlijk, maar toch .....
Heb nog misschien een leuke oplossing:
Het hoeft niet eens per-see met een loop!
Of bij grotere range van getallen:
Het hoeft niet eens per-see met een loop!
Of bij grotere range van getallen:
Code (php)
Gewijzigd op 30/04/2014 12:13:02 door Mark Hogeveen
Je hebt het al veranderd ;-)
Gewijzigd op 30/04/2014 12:17:20 door Ger van Steenderen
Gewijzigd op 30/04/2014 12:17:37 door Mark Hogeveen
Je gebruikte een niet bestaande functie ....




