web-dev-qa-db-de.com

Wie beenden Sie zwei verschachtelte Schleifen?

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?

41
fireshadow52

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;
   }
}
83
sirbrialliance

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;
19

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.

6
Dan Tao

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;
  }
}
1
Blessed Geek

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;
   }
}
0
Dipto_Das

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
0
Kacper Obrzut