Ich benutze Java seit einiger Zeit, aber meine Ausbildung in Schleifen fehlt etwas. Ich weiß, wie man jede Schleife, die in Java existiert, erstellt und auch aus den Schleifen ausbricht. Ich habe jedoch kürzlich darüber nachgedacht:
Angenommen, ich habe zwei verschachtelte Schleifen. Könnte ich mit nur einer
break
-Anweisung aus beiden Schleifen ausbrechen?
Hier ist was ich bis jetzt habe.
int points = 0;
int goal = 100;
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
break; // For loop ends, but the while loop does not
}
// I know I could put a 'break' statement here and end
// the while loop, but I want to do it using just
// one 'break' statement.
points += i;
}
}
Gibt es einen Weg, dies zu erreichen?
In Java können Sie mit einem Label angeben, welche Schleife unterbrochen/fortgesetzt werden soll:
mainLoop:
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
break mainLoop;
}
points += i;
}
}
Ja, Sie können break mit dem Label schreiben z.B.
int points = 0;
int goal = 100;
someLabel:
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
break someLabel;
}
points += i;
}
}
// you are going here after break someLabel;
Es gibt viele Möglichkeiten, diese Katze zu enthäuten. Hier ist eins:
int points = 0;
int goal = 100;
boolean finished = false;
while (goal <= 100 && !finished) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
finished = true;
break;
}
points += i;
}
}
Update : Wow, wusste nicht, mit Etiketten zu brechen. Das scheint eine bessere Lösung zu sein.
Elementarer lieber Watson ...
int points = 0;
int goal = 100;
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
goal++;
break;
}
points += i;
}
}
oder
int points = 0;
int goalim = goal = 100;
while (goal <= goalim) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
goal = goalim + 1;
break;
}
points += i;
}
}
Sie können die Schleifensteuervariablen zurücksetzen.
int points = 0;
int goal = 100;
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
i = goal = 101;
}
points += i;
}
}
Sie sollten keine Labels in objektiver Sprache verwenden. Sie müssen die for/while-Bedingung neu schreiben.
Ihr Code sollte also so aussehen:
int points = 0;
int goal = 100;
while (goal <= 100 && points <= 50) {
for (int i = 0; i < goal && points <= 50; i++) {
points += i;
}
}
// Now 'points' is 55