do-while - Sinnvoll?

Status
Nicht offen für weitere Antworten.

Djinndrache

Bekanntes Mitglied
Hallo,

ich bin zwar in diversen Sprachen schon ein paar Jahre aktiv am schreiben, aber heute haben wir eine Aufgabe bekommen, über die ich schon lange nachdenke, allerdings nie eine wirklich gute Antwort finde.

Gefragt ist nach einem sinnvollen Beispiel für den Gebrauch einer do-while-Schleife.

Das einzige was da einigermaßen in Frage käme (was mir einfällt), wäre das Berechnen einer Fakultät, was allerdings auch mit einer for()-Schleife einfacher wäre..


Wozu also do-while?

Kann ruhig ein komplexeres Beispiel sein, hauptsache es ist wirklich sinnvoll :)


Danke im Voraus
 

Wildcard

Top Contributor
Eine Schleifenart ist immer ausreichend. Die do-while Schleife ist allerdings komfortabler, wenn du weißt, dass der Code mindestens einmal ausgeführt werden muss.
 
M

maki

Gast
Beispiel habe ich keines,

aber do-while nimmt man immer dann, wenn die Schleife mindestens einmal durchlaufen werden muss.

do-while sieht man im richtigen Leben eher selten, zumindest ime.
 

Djinndrache

Bekanntes Mitglied
Was die Schleife macht, weiß ich auch, nicht nur von Java aus. Allerdings hab ich in all den Jahren nie eine solche Schleife benutzt und brauche jetzt ein Beispiel..

Da bin ich jetzt ratlos ;)

Am besten ist natürlich ein praktisches Beispiel...
 
S

SlaterB

Gast
wenn testeInput() 10 Sekunden pro Test braucht

dann besser
do {
frage User nach Input
} while (testeInput(input))

statt

input = -1
while (testeInput(input)) {
frage User nach Input
}
[10 Sekunden unnötig getestet]

oder


input = -1
while (input == -1 or testeInput(input)) {
frage User nach Input
}
[zusätzliche Abfrage input == -1]

--------

ich würde aber sogar [zusätzliche Abfrage input == -1] wählen,
da die while-Schleife gewohnter ist
 

ARadauer

Top Contributor
ich hab in den letzen 2 Jahren ca 40.000 Zeilen Java Code geschrieben und nicht eimal do while verwendet.
(ausser bei studienaufgaben wo es geforder war)
 

Djinndrache

Bekanntes Mitglied
Mh, das mit der unnötigen Performance hört sich ganz gut an, ich denke so in der Art werde ich mir was zusammenschreiben :)

Weitere Vorschläge sehe ich natürlich trotzdem gerne, vielleicht kommt ja noch was schönes :)
 

Verjigorm

Top Contributor
Beispiel

"Mensch ärgere dich nicht"-Spiel


int wuerfel;
do {
wuerfel=(int) (Math.random()*6+1);
} while (wuerfel!=6);

dh. würfele solange, bis eine 6 gefallen ist bzw. andersherum: wiederhole das Würfeln solange, solange das Würfelergebnis nicht 6 ist.
---> Dabei muss mindestens einmal gewürfelt werden <---



wobei man vermutlich jede do-while in eine while-schleife umformen kann
 
S

SlaterB

Gast
dieses Kurzbeispiel macht sogar mehr Sinn als meins, wo ich nach extralangen 10 Sekunden gesucht habe ;)

> wobei man vermutlich jede do-while in eine while-schleife umformen kann

das klingt wieder schlechter, bitte 'vermutlich' streichen ;)
 

Djinndrache

Bekanntes Mitglied
Das Beispiel ist echt gut :)

Dass man die Schleifen umwandeln kann ist klar, man kann auch jede while() in eine for() umwandeln, wenn man es drauf anlegt ;)
 
S

SlaterB

Gast
Quatsch, for-Schleifen sind entartete while-Schleifen

die Eigenschaft, nach einem bestimmten Test abzubrechen, ist das zentrale Kriterium, und gehört zu while,

dass bei for eine Variable hochgezählt wird, ist ein höheres, zusätzliches Konstrukt,
syntaktischer Zucker
 

Djinndrache

Bekanntes Mitglied
Ich glaub Slater hat recht ;) Immerhin kann man vor der while int i machen und bevor die while zu ende ist i++ und in die Bedingung i<10 - schon hat man alle Teile einer for()-Schleife zusammen ^^
 

HolgerB

Mitglied
Beispiel Konsolenanwendung:

Nehmen wir ein Quiz, welches z.B. 10 Fragen stellt und am Ende die Frage kommt:
"Wollen Sie nochmal (j/n)?" Wenn Bedingung (j) = true, dann startet das Quiz von vorne, ansonsten Programmende.
Es gibt noch viele weitere Beispiele.

Grüße
Holger
 
M

maki

Gast
SlaterB hat gesagt.:
Quatsch, for-Schleifen sind entartete while-Schleifen

die Eigenschaft, nach einem bestimmten Test abzubrechen, ist das zentrale Kriterium, und gehört zu while,

dass bei for eine Variable hochgezählt wird, ist ein höheres, zusätzliches Konstrukt,
syntaktischer Zucker
Das stimmt nicht, war schon immer so, auch in C/C++ ;)

Man kommt viel einfacher von einer for Schleife zu einer while Schleife als umgekehrt, muss nur Dinge auslassen.

Folgender Code:
Code:
package test;

public class LoopTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		forLoop();
		whileLoop();
	}
	
	public static void forLoop() {
		for (int i = 0; i < 5; i++) {
			System.out.println("forLoop()");
		}
	}

	public static void whileLoop() {
		int i = 0;
		while (i < 5) {
			System.out.println("whileLoop()");
			i++;
		}
	}
}
Nach dem Kompilieren werden beide Schleifen zu for Schleifen, so wie oft wenn der Compiler ein while findet.
Entweder dass, oder er macht eine do-while schleife draus(optimieren), da die doch spezieller ist und nicht einfach so auf eine for Schleife zurückgeführt werden kann.

while ist nur für Menschen gemacht, als abkürzung, sonst nix.
 
S

SlaterB

Gast
naja, da will man wohl Code sparen und baut die weitere Verarbeitung nur für for,
der einfache while-Fall läßt sich dann leicht als for mit Lücken darstellen

das ist so als wenn man nur für if+else eine Code-Generierung kennt
und jedes einfache if ohne else dann in if {Code} else {} umoptimiert

also wäre jedes normale if ein entartetes if-else statt andersrum..

nach Compiler-Regeln kann man sowas klassifizieren, mit Logik hat das dann aber nicht viel zu tun ;)
 
M

maki

Gast
Ich verstehe was du meinst mit if-else.

Könnte mich täuschen, aber ich glaube, dass es zumindest in C/C++ so war, dass jede Schleife zu einer eigenen Funktion und deren Aufruf geändert wurde, da war es ein leichtes, Initialisierung und abschliessende Inkrementierung umzusetzen.

Jedenfalls glaube ich nicht das bytecode ein for oder while Konstrukt kennt, sondern einfach nur Zeiger und dann im Code herumspringt.
 

Murray

Top Contributor
maki hat gesagt.:
while ist nur für Menschen gemacht, als abkürzung, sonst nix.

Wie letztendlich alle anderen (Java- [oder irgendeine andere (Hoch-)Sprache-])-Befehle auch.

Manche Sachverhalte lassen sich eben einfacher als "wiederhole solange" formulieren als als "wiederhole bis" - letztendlich kann man beides zu einer (entarteten) for-Schleife verallgemeinern - es wurde aber (vor langer Zeit) die Design-Entscheidung getroffen, trotzdem in der Sprache die anderen Varianten zusätzlich zu unterstützen.
 
G

Guest

Gast
In Assembler sind do-while Schleifen viel häufiger zu finden. Die ganzen bedingten Sprunganweisungen wie JZ, JZE,
JC etc. sind meist am Ende einer Schleife zu finden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
DrahtEck Arrays und While-Loop Java Basics - Anfänger-Themen 50
C Erste Schritte While-Schleife Java Basics - Anfänger-Themen 3
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
S Erste Schritte While Schleifen Java Basics - Anfänger-Themen 11
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
Say do-while Syntak Java Basics - Anfänger-Themen 3
G Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
D Array mit while-schleife Java Basics - Anfänger-Themen 12
B do while Schleife Java Basics - Anfänger-Themen 3
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
M While Schleife? Java Basics - Anfänger-Themen 4
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Aeon Erste Schritte Preise berechnen mit do-while Java Basics - Anfänger-Themen 9
J for /while Schleife Java Basics - Anfänger-Themen 5
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
S Do-While-Schleife Java Basics - Anfänger-Themen 2
S While Schleife Java Basics - Anfänger-Themen 4
S Do-While Schleife Java Basics - Anfänger-Themen 6
J Von While zu for Java Basics - Anfänger-Themen 42
G While/If Programm Java Basics - Anfänger-Themen 2
L String in Do-While-Schleife Abbruchkriterium Java Basics - Anfänger-Themen 1
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
G Flussdiagramm-Do while Java Basics - Anfänger-Themen 4
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
B Verschachtelung von For-Schleife in While Schleife Java Basics - Anfänger-Themen 14
G while schleife Java Basics - Anfänger-Themen 11
G while schleife mit array Java Basics - Anfänger-Themen 12
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
I Do-While / Kalkulator / Bitte um Hilfe Java Basics - Anfänger-Themen 9
G While schleife Java Basics - Anfänger-Themen 2
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
N while Schleife wird nicht beendet, obwohl Sie hätte breaken sollen Java Basics - Anfänger-Themen 4
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
O Erste Schritte Zahlendreieck mit While Java Basics - Anfänger-Themen 2
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
A Erste Schritte while-Schleife Java Basics - Anfänger-Themen 38
W While-Loop unterbrechen Java Basics - Anfänger-Themen 4
X While Do schleife funtioniert nicht Java Basics - Anfänger-Themen 5
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
J Input/Output Strings aneinander reihen mit while schleife Java Basics - Anfänger-Themen 25
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
J While Schleife Java Basics - Anfänger-Themen 19
S While-Schleifen Ausgabe als String? Java Basics - Anfänger-Themen 1
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Z Return in While-Schleife Java Basics - Anfänger-Themen 7
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
helldunkel While Schleife trotz false Java Basics - Anfänger-Themen 4
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
b1ck while-Schleife Java Basics - Anfänger-Themen 10
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
A While-Schleife funktioniert nicht! Java Basics - Anfänger-Themen 33
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
E Alphabet mit einer while Schleife ausgeben Java Basics - Anfänger-Themen 3
I Mehre While-Schleifen hintereinander Java Basics - Anfänger-Themen 13
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
F Reached end while parsing Java Basics - Anfänger-Themen 6
B Passwort prüfen bis eindeutig - while Schleife? Java Basics - Anfänger-Themen 11
$ Multiplikations-Rechner mit while Schleife Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben