Wat zijn de verschillen tussen een while-lus en een for-lus?
Geplaatst op februari 17, 2021 door adminWat zijn de verschillen tussen een while-lus en een for-lus? Het lijkt mij dat ze hetzelfde zijn.
Reacties
Answer
De while
-lus wordt meestal gebruikt wanneer u iets moet herhalen totdat aan een bepaalde voorwaarde is voldaan :
inputInvalid = true; while(inputInvalid) { //ask user for input invalidInput = checkValidInput(); }
Aan de andere kant wordt de for
-lus meestal gebruikt wanneer u een bepaald getal moet herhalen vaak:
for(var i = 0; i < 100; i++) { ...//do something for a 100 times. }
Je kunt ze onderling uitwisselbaar gebruiken als je wilt:
inputInvalid = true; for(;;) { if(!inputInvalid) { break; } //ask user for input invalidInput = checkValidInput(); }
Of
inputInvalid = true; for(;inputInvalid;) { //ask user for input invalidInput = checkValidInput(); }
En:
var i = 0; while(i < 100) { //do your logic here i++; }
Reacties
- Zoals je kunt zien, produceren deze niet-standaard gebruiksmogelijkheden minder elegante, moeilijk te lezen code. Onder de motorkap zijn de verschillende lustypen allemaal dezelfde voorwaardelijke goto, dus probeer degene te gebruiken die syntactisch het beste past bij wat je probeert te bereiken.
- In de onderstaande code kan ik ook zeggen doe iets 10 keer. (Het vult je argument als voor lus @npinti) var count = 0; while (tel < 10) {document.writeln (" looping weg! ") ; tel ++; }
- Merk op dat u in C uw derde voorbeeld kunt herschrijven als
for(invalidInput = checkValidInput();inputInvalid;invalidInput = checkValidInput()){}
. Maar ja, je basispunt is helemaal correct, en eenfor
-lus is eigenlijk gewoon syntaxis suiker. Sommige talen doen het helemaal zonder. De Cfor
-lus is een vreemd beest, eigenlijk meer een verbasterdewhile
in tegenstelling tot talen zoals Pascal, waar defor
lus kan alleen worden gebruikt om door discrete gehele getallen te stappen. - wat betekent het voor (;;). Ik kan de uitleg van for (;;) niet vinden.
- @mistichor de C / C ++ for-lus neemt 3 instructies voor (;;) is een for-lus met 3 lege instructies, de puntkomma scheidt de lege instructies .
Antwoord
Er is een fundamenteel verschil tussen de twee: met een for
loop, je moet vooraf weten hoe vaak de body van de loop zal worden uitgevoerd. Dit is een belangrijke beperking, aangezien er veel problemen zijn waarbij u dat eenvoudigweg niet weet. Soms weet u niet eens of dat aantal al dan niet eindig is helemaal !
Beschouw bijvoorbeeld een programma waarin de gebruiker wordt gevraagd een reeks namen in te voeren. Stel, een patiëntbeheersysteem voor een tandarts. Hoe zou u van tevoren weten hoeveel patiënten de tandarts binnengaat? Dat doe je niet! Je kunt daarvoor geen for
-lus schrijven.
Reacties
- Er zijn verschillende manieren om een for-lus vroegtijdig te beëindigen, dus u hoeft alleen de maximale tijden te weten die u van plan bent om de lus te herhalen. Verder, als je ' bereid bent om het voorwaardelijke deel van de for-lus verkeerd te gebruiken, kun je het alles laten doen wat een while-lus zou kunnen.
- Welke taal heb je het over?In pascal heeft je argument enige verdienste (een groot aantal hardcoderen als limiet is lelijk), maar in C kun je willekeurige voorwaarden gebruiken met
for
. Geen verschil tussenfor(;xxx;)
enwhile(xxx)
. - pijl-omlaag. Chaos is precies correct.
initializer;
gevolgd doorwhile(condition){ ... increment;}
is hetzelfde alsfor(initializer; condition; increment){ ... }
.
for
-lus is gewoon syntaxis en ondersteunt een subset van gebruiksscenarios diewhile
ondersteunt. Soms wordt er op " syntaxis sugar " neergekeken, maar het moet echt worden gezien als een manier om schonere, gemakkelijker te begrijpen code te maken .for
-lus eigenlijk eenwhile
-lus is in mooie kleding.