Vad är skillnaderna mellan en while-loop och en for-loop?
On februari 17, 2021 by adminVilka är skillnaderna mellan en while-loop och en for-loop? Det verkar som om de är desamma.
Kommentarer
Svar
while
-slingan används vanligtvis när du behöver upprepa något tills ett givet villkor är sant :
inputInvalid = true; while(inputInvalid) { //ask user for input invalidInput = checkValidInput(); }
Å andra sidan används for
-slingan vanligtvis när du behöver upprepa ett givet nummer gånger:
for(var i = 0; i < 100; i++) { ...//do something for a 100 times. }
Du kan använda dem omväxlande om du vill:
inputInvalid = true; for(;;) { if(!inputInvalid) { break; } //ask user for input invalidInput = checkValidInput(); }
Eller
inputInvalid = true; for(;inputInvalid;) { //ask user for input invalidInput = checkValidInput(); }
Och:
var i = 0; while(i < 100) { //do your logic here i++; }
Kommentarer
- Som ni kan se producerar dessa icke-standardiserade användningsområden mindre elegant, svårläst kod. Under huven är de olika looptyperna alla samma villkorliga goto, så försök att använda den som syntaktiskt passar bäst vad du försöker uppnå.
- I koden nedan kan jag också säga gör något 10 gånger. (Det fyller ditt argument som för loop @npinti) var count = 0; medan (räkna < 10) {document.writeln (" slingrar bort! ") ; räkna ++; }
- Observera att i C kan du skriva om ditt tredje exempel som
for(invalidInput = checkValidInput();inputInvalid;invalidInput = checkValidInput()){}
. Men ja, din grundläggande punkt är helt korrekt, och enfor
-slinga är egentligen bara syntaxsocker. Vissa språk klarar sig helt utan det. Cfor
-slingan är ett konstigt odjur, egentligen mer av en bastardiseradwhile
till skillnad från språk som Pascal, därfor
loop kan bara användas för att gå igenom diskreta heltal. - vad betyder det för (;;)? Jag kan inte hitta förklaring av för (;;) det.
- @mistichor C / C ++ för loop tar 3 uttalanden för (;;) är en for loop med 3 tomma uttalanden, semikolon skiljer de tomma uttalandena .
Svar
Det finns en grundläggande skillnad mellan de två: med en for
loop, du måste veta i förväg hur ofta loop-kroppen kommer att köras. Detta är en stor begränsning, eftersom det finns många problem där du helt enkelt inte vet det. Ibland vet du inte ens om det numret är ändligt alls !
Tänk till exempel på ett program som ber användaren att mata in en serie namn. Säg, ett patienthanteringssystem för en tandläkare. Hur skulle du veta i förväg hur många patienter tandläkaren ska gå in? Du kan inte skriva en for
slinga för det.
Kommentarer
- Det finns flera sätt att avsluta en for loop tidigt, så du behöver bara veta de maximala tiderna du tänker iterera runt loop. Vidare, om du ' är villig att missanvända den villkorliga delen av for-slingan, kan du få den att göra allt som en stund-loop kan.
- Vilken språk pratar du om?I pascal har ditt argument en del förtjänster (hårdkodning av ett stort antal eftersom gränsen är ful), men i C kan du använda godtyckliga villkor med
for
. Ingen skillnad mellanfor(;xxx;)
ochwhile(xxx)
. - nedåtpil. Kaos är exakt korrekt.
initializer;
följt avwhile(condition){ ... increment;}
är samma somfor(initializer; condition; increment){ ... }
.
for
-slinga är bara syntaxsocker och stöder en delmängd av användningsfall somwhile
stöder. Ibland ses " syntax socker ", men det bör verkligen ses på som ett sätt att skapa renare, lättare att förstå kod .for
loop är faktiskt enwhile
loop i snygga kläder.