Switch-case in while-Schleife: Mit "break" in switch-case auch while-Schleife verlass

Hallo,

gegeben sei folgender Pseudocode:

while(true) {
 switch(eingabe) {
			      case '0': bla(); break;
				  case '1': bla2(); break;
				  case '2': bla3(); break;
				  default: 1;
			   }
}

Wenn jetzt eingabe gleich ‘0’ ist und dann bla() aufgerufen wird und danach dann break;, wird dann durch das break; in dem Beispiel hier nur der switch-Case Block verlassen oder auch die while-Schleife?
Ich tendiere zum ersteren, bin mir aber nicht ganz sicher…

Was hindert dich daran das auszutesten?

Habs ausgetestet, hatte recht :wink:

Du kannst statt dem true in der while Schleife auch ne variable nehmen, die du dann änderst. Oder aber du Nutzt Labels über der Schleife.

ouh … ganz böse …

sowas sollte man anfängern gar nicht erst zeigen … sonst kommt katastrophales batch-gehaspel raus

@Unregistered
und die Alternative ist? also zur Variablen,
Labels sicherlich etwas ganz anderes, sieht man ja auch nirgendwo in Lehrbüchern/ der API im Einsatz

In dem Fall vergiss nicht Senf und Spülmittel in deinen Longdrink zu mischen.

[QUOTE=Unregistered]ouh … ganz böse …

sowas sollte man anfängern gar nicht erst zeigen … sonst kommt katastrophales batch-gehaspel raus[/QUOTE]

Was spricht denn dagegen eine Variable zu nehmen? Den Speicher den ein bool benötigt kann man ja, in den meisten fällen, vernachlässigen und wenn man sonst ordentlichen Code schreibt sind die zwei Zeilen mehr wohl auch kein großes Problem?
Eine echte Alternative zu einer Variablen würde mir auch nicht einfallen.

Die Aussage bezog sich wohl nur auf den zweiten Teil des Zitates. Das Fullquote ergibt so zumindest nicht soviel Sinn :wink:

Du kannst umgebende Blöcke (egal wie tief geschachtelt) über benannte Labels verlassen - allerdings sollte dieses Feature normalerweise vermieden werden (mir ist es in fünfzehn Jahren Java noch nie in “freier Wildbahn” begegnet, und das aus gutem Grund):

outerLabel: 
while(true) {
 switch(eingabe) {
			      case '0': bla(); break;
				  case '1': bla2(); break outerLabel; //verlässt die ganze Schleife
				  case '2': bla3(); break;
				  default: 1;
			   }
}

Das Hauptproblem an der Stelle sind doch Eingaben, die nicht in die switch-cases passen. Im default-Block kommt dann vermutlich sowas wie "ungültige Eingabe, bitte geben sie foo oder bar ein.

Sowas in der Art sollte brauchbarer sein:

input = doInput();
inputValid = true;
switch(input){
case ...
default:{
inputValid = false;
}
}
}```

Oder gleich eine Variante mit ausgelagerten Methoden.
return ist immer noch der beste Ersatz für break/continue.

Gruß