Was sind die Unterschiede zwischen einer while-Schleife und einer for-Schleife?
On Februar 17, 2021 by adminWas sind die Unterschiede zwischen einer while-Schleife und einer for-Schleife? Es scheint mir, dass sie gleich sind.
Kommentare
- Versuchen Sie, beide für mehrere " fordert " heraus. Sie ' werden schnell feststellen, dass ein Schleifenkonstrukt für eine bestimmte Situation besser geeignet ist als andere Schleifenkonstrukte. Tatsächlich gibt es in einigen Sprachen (wie in Javascript) zwei Arten von while-Schleifen mit eigenen (speziellen) Anwendungsfällen. Tatsächlich können beide / alle drei verwendet werden, um ein Ziel zu erreichen, aber nur einer kann die Aufgabe ohne zu viel semantischen " Overhead " erledigen (erleichtert das Verständnis zB)
- Sie sind im Grunde gleich. Eine
for
-Schleife ist nur Syntaxzucker und unterstützt eine Teilmenge von Anwendungsfällen, diewhile
unterstützt. Manchmal wird auf " Syntaxzucker " herabgesehen, aber es sollte wirklich als eine Möglichkeit angesehen werden, saubereren und leichter verständlichen Code zu erstellen . - Up-Voted! Keine Frage ist zu albern, wenn Sie lernen.
- @StevenBurnap: Sie sind im Grunde nicht gleich. Eine Sprache mit nur while-Schleifen und Bedingungen ist Turing-vollständig, eine Sprache mit nur for-Schleifen ist nicht ' t. Eine Sprache mit while-Schleifen kann jede µ -rekursive Funktion berechnen, eine Sprache mit for-Schleifen kann nur primitiv-rekursive Funktionen berechnen. Eine Sprache mit for-Schleifen kann nur Programme ausdrücken, die immer beendet werden, sie kann keine Nichtbeendigung ausdrücken.
- @J ö rgWMittag Nun, das hängt von der for-Schleife ab ' t es jetzt nicht. Obwohl man argumentieren könnte, dass eine C
for
-Schleife tatsächlich einewhile
-Schleife in ausgefallener Kleidung ist.
Antwort
Die Schleife while
wird normalerweise verwendet, wenn Sie etwas wiederholen müssen, bis eine bestimmte Bedingung erfüllt ist :
inputInvalid = true; while(inputInvalid) { //ask user for input invalidInput = checkValidInput(); }
Andererseits wird die Schleife for
normalerweise verwendet, wenn Sie eine bestimmte Zahl iterieren müssen von Zeiten:
for(var i = 0; i < 100; i++) { ...//do something for a 100 times. }
Sie können sie austauschbar verwenden, wenn Sie möchten:
inputInvalid = true; for(;;) { if(!inputInvalid) { break; } //ask user for input invalidInput = checkValidInput(); }
Oder
inputInvalid = true; for(;inputInvalid;) { //ask user for input invalidInput = checkValidInput(); }
Und:
var i = 0; while(i < 100) { //do your logic here i++; }
Kommentare
- Wie Sie jedoch sehen können, erzeugen diese nicht standardmäßigen Verwendungen weniger eleganten, schwerer zu lesenden Code. Unter der Haube sind die verschiedenen Schleifentypen alle gleich, und versuchen Sie, diejenige zu verwenden, die syntaktisch am besten zu dem passt, was Sie erreichen möchten.
- Im folgenden Code kann ich auch sagen, etwas zu tun 10 mal. (Es füllt Ihr Argument wie für die Schleife @npinti) var count = 0; while (count < 10) {document.writeln (" schleift weg! ") ;; count ++; }
- Beachten Sie, dass Sie in C Ihr drittes Beispiel als
for(invalidInput = checkValidInput();inputInvalid;invalidInput = checkValidInput()){}
umschreiben können. Aber ja, Ihr grundlegender Punkt ist völlig richtig, und einefor
-Schleife ist wirklich nur Syntaxzucker. Einige Sprachen verzichten ganz darauf. Die Cfor
-Schleife ist ein seltsames Tier, im Gegensatz zu Sprachen wie Pascal, in denen die iv id = „a49e8ba4e6“ eher eine bastardisiertewhile
ist „>
-Schleife kann nur verwendet werden, um diskrete Ganzzahlen zu durchlaufen.
Antwort
Es gibt einen grundlegenden Unterschied zwischen den beiden: mit a for
Schleife, Sie müssen vorher wissen, wie oft der Schleifenkörper ausgeführt wird. Dies ist eine große Einschränkung, da es viele Probleme gibt, bei denen Sie das einfach nicht wissen. Manchmal wissen Sie nicht einmal, ob diese Zahl endlich ist !
Stellen Sie sich zum Beispiel ein Programm vor, das den Benutzer auffordert, eine Reihe von Namen einzugeben. Sagen wir, ein Patientenmanagementsystem für einen Zahnarzt. Wie würden Sie vorher wissen, wie viele Patienten der Zahnarzt aufnehmen wird? Sie können keine for
-Schleife dafür schreiben.
Kommentare
- Es gibt verschiedene Möglichkeiten, eine for-Schleife vorzeitig zu beenden. Sie müssen also nur wissen, wie oft Sie die Schleife maximal durchlaufen möchten. Wenn Sie ' bereit sind, den bedingten Teil der for-Schleife falsch zu verwenden, können Sie alles tun, was eine while-Schleife könnte.
- Welche Sprache sprichst du?In Pascal hat Ihr Argument einen gewissen Wert (das Hardcodieren einer großen Zahl als Grenze ist hässlich), aber in C können Sie beliebige Bedingungen mit
for
verwenden. Kein Unterschied zwischenfor(;xxx;)
undwhile(xxx)
. - Abwärtspfeil. Chaos ist genau richtig.
initializer;
gefolgt vonwhile(condition){ ... increment;}
entsprichtfor(initializer; condition; increment){ ... }
.
Schreibe einen Kommentar