W3docs

Java continue-Anweisung

Mit der continue-Anweisung in Java die aktuelle Schleifeniteration überspringen, einschließlich beschrifteter continue-Anweisungen.

continue ist das leichtere Gegenstück zu break. Während break bedeutet beende die Schleife vollständig, bedeutet continue überspringe den Rest dieser Iteration und starte die nächste. Die Schleife läuft weiter.

Diese Seite erklärt, wie continue jede Schleifenart fortsetzt, die Endlosschleifen-Falle in while-Schleifen, die Verwendung zur Filterung von Elementen, wann es einer invertierten if-Bedingung vorzuziehen ist und wie es nur die innerste Schleife betrifft.

Grundlegende Verwendung

for (int i = 0; i < 5; i++) {
  if (i == 2) {
    continue;
  }
  System.out.println(i);
}

Ausgabe:

0
1
3
4

Wenn i == 2 ist, springt continue direkt zum Aktualisierungsschritt der Schleife (i++) und überspringt das println. Die Schleife prüft dann erneut ihre Bedingung und fährt mit i == 3 fort.

Wie Schleifen fortgesetzt werden

Das Verhalten hängt von der Schleifenart ab:

  • for — führt den Aktualisierungsausdruck aus und prüft dann die Bedingung
  • while — prüft die Bedingung sofort
  • do/while — prüft die Bedingung sofort (am Ende der Schleife)
  • erweitertes for — wechselt zum nächsten Element

Ein continue in einer while-Schleife, das vergisst, den Zustand weiterzuschalten, kann schnell zu einer Endlosschleife werden:

int i = 0;
while (i < 5) {
  if (i == 2) {
    continue;     // i never advances — infinite loop!
  }
  System.out.println(i);
  i++;
}

Das ist ein klassischer Fehler. Entweder wird vor dem continue inkrementiert, oder man verwendet eine for-Schleife, damit der Aktualisierungsschritt automatisch ausgeführt wird.

Elemente filtern

Die häufigste Verwendung von continue ist „Elemente überspringen, die nicht benötigt werden":

int[] nums = {3, 7, 2, 8, 5, 4};

for (int n : nums) {
  if (n % 2 != 0) {
    continue;          // skip odd numbers
  }
  System.out.println(n);
}

Ausgabe: 2 8 4.

continue vs. Bedingung invertieren

Oft lässt sich ein continue als if umschreiben, das den Rest des Rumpfs einschließt:

for (int n : nums) {
  if (n % 2 == 0) {
    System.out.println(n);
  }
}

Funktional identisch. Welche Variante bevorzugt wird, ist eine Stilfrage:

  • continue verwenden, wenn es mehrere Übersprungbedingungen gibt; eine Reihe von frühzeitigen Abbrüchen ist flacher als tief verschachtelte ifs.
  • Ein umschließendes if verwenden, wenn die Übersprungbedingung einfach und der Rumpf kurz ist.
// continue style — easy to add another skip condition
for (User u : users) {
  if (u == null) continue;
  if (!u.isActive()) continue;
  if (u.isBanned()) continue;
  process(u);
}

continue überspringt nur eine Ebene

Wie break wirkt continue auf die innerste umgebende Schleife:

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    if (j == 1) continue;     // only skips inner iteration
    System.out.println(i + "," + j);
  }
}

Ausgabe:

0,0
0,2
1,0
1,2
2,0
2,2

Um die äußere Schleife von innen heraus mit continue zu überspringen, wird eine beschriftete continue-Anweisung verwendet — behandelt in beschriftete Anweisungen.

Ein ausgearbeitetes Beispiel

java— editable, runs on the server

Was kommt als Nächstes

Wenn man for-Schleifen kombiniert, erhält man verschachtelte Schleifen — die Grundlage für die Arbeit mit Rastern, Tabellen und 2D-Arrays.

Übungen

Übung
Was gibt diese Schleife aus? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
Was gibt diese Schleife aus? for (int i = 0; i < 5; i++) { if (i == 2) continue; System.out.print(i); }
Was this page helpful?