JavaRush /Java-Blog /Random-DE /Sprungoperatoren
articles
Level 15

Sprungoperatoren

Veröffentlicht in der Gruppe Random-DE
Java unterstützt drei Sprungoperatoren – break, continueund return. Sie übertragen die Kontrolle auf einen anderen Teil Ihres Programms. Betrachten wir jeden der Operatoren im Detail. Übergangsoperatoren - 1

Verwendung des Operatorsbreak

Der Operator breakin Java wird in drei Fällen verwendet. Wie Sie bereits gesehen haben, endet die Anweisungsfolge zunächst an den Anweisungsverzweigungen switch. Zweitens kann es genutzt werden, um aus einer Schleife auszubrechen. Drittens kann es als „zivilisierte“ Form des bedingungslosen Sprungoperators verwendet werden goto. In diesem Abschnitt werden die letzten beiden Fälle erläutert. Verwenden Sie diese Option , breakum eine Schleife zu verlassen. Mit breakkönnen Sie die sofortige Beendigung der Schleife erzwingen und dabei den bedingten Ausdruck und den verbleibenden Code im Schleifenkörper umgehen. Wenn eine Anweisung breakinnerhalb einer Schleife angetroffen wird, wird die zweite Anweisung beendet und die Programmsteuerung an die folgende Anweisung übergeben. Einfaches Beispiel:
// Использование break для выхода из цикла.
public class BreakLoop {

  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      if (i == 4) {
        break; // завершить цикл, если i = 4
      }
      System.out.println("i: " + i);
    }
    System.out.println("Цикл завершен.");
  }
}
Dieses Programm generiert die folgende Ausgabe:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Obwohl die Schleife forhier so konzipiert ist, dass sie ihre Anweisungen 0 bis 99 Mal ausführt, breakbewirkt der Operator, dass sie vorzeitig beendet wird, wenn i gleich 4 ist. Der Operator breakkann mit jeder Java-Schleife verwendet werden, auch mit absichtlichen Endlosschleifen. Unten sehen Sie beispielsweise das vorherige Programm, das mit einer Schleife codiert wurde while. Die Ausgabe dieses Programms ist die gleiche wie die seines Vorgängers.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {

  public static void main(String[] args) {
    int i = 0;
    while (i < 100) {
      if (i == 4) {
        break; // закончить цикл, если i = 4
      }
      System.out.println("i: " + i);
      i++;
    }
    System.out.println("Цикл завершен.");
  }
}
Bei Verwendung innerhalb einer Reihe verschachtelter Schleifen breakverlässt die Anweisung nur die innerste Schleife. Zum Beispiel:
// Использование break во вложенных циклах.
public class BreakLoop3 {

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break; // закончить цикл, если j = 4
        }
        System.out.print(j + " ");
      }
      System.out.println();
    }
    System.out.println("Цикл завершен.");
  }
}
Dieses Programm generiert die folgende Ausgabe:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Wie Sie sehen, breakbewirkt die Anweisung in der inneren Schleife, dass nur diese Schleife beendet wird. Die äußere Schleife ist nicht betroffen. Lassen Sie uns noch zwei Bemerkungen dazu machen break. Erstens können mehrere Anweisungen in einer Schleife erscheinen break. Seien Sie jedoch vorsichtig. Zu viele davon neigen dazu, Ihren Code zu zerstören. Zweitens wirkt sich das break, das den - Operator beendet switch, nur auf den angegebenen switch- Operator aus (und nicht auf die Schleifen, die ihn enthalten). Kommentar: Breakwurde nicht als normales Mittel zum Schleifenabschluss konzipiert. Diesem Zweck dient der bedingte Ausdruck im Schleifenheader. Der Operator breaksollte nur zum Unterbrechen der Schleife verwendet werden, wenn bestimmte Sondersituationen auftreten.

breakAls Formular verwendengoto

Neben der Verwendung in Switch- Anweisungen und Schleifen breakkann es auch allein als „zivilisierte“ Form von verwendet werden goto. Java enthält den Operator nicht, gotoda es die Verzweigung auf willkürliche und unstrukturierte Weise ausführt. Code, der . intensiv verwendet, gotoist normalerweise schwer zu verstehen und zu warten. Es überschreibt auch einige Compiler-Optimierungen. Es gibt jedoch mehrere Stellen in einem Programm, an denen gotoder Kontrollfluss ein wertvolles und legitimes Konstrukt ist. Dies kann beispielsweise gotonützlich sein, wenn Sie aus einer tief verschachtelten Reihe von Schleifen ausbrechen. Um mit solchen Situationen umzugehen, definiert Java eine erweiterte Form des Operators break. Damit können Sie einen oder mehrere Codeblöcke verlassen. Diese Blöcke müssen nicht Teil einer Schleife oder Anweisung sein switch. Dies kann ein beliebiger Block sein. Als Nächstes können Sie genau bestimmen, wo die Ausführung fortgesetzt werden soll, da dieses Formular breakmit der Marke arbeitet und die Vorteile von bietet gotound deren Probleme umgeht. Eine breakbeschriftete Anweisung hat die folgende allgemeine Form: break label; Hier labelist der Name einer Beschriftung, die einen Codeblock identifiziert. Wenn dieses Formular breakausgeführt wird, wird die Kontrolle vom benannten Codeblock (dessen Bezeichnung in der Anweisung angegeben ist break) auf die Anweisung übertragen, die diesem Block folgt. Ein markierter Codeblock muss unbedingt diese Anweisung enthalten break, es ist jedoch nicht erforderlich, dass diese Einbindung direkt erfolgt (d. h. breaksie kann nicht direkt in einen Block mit eigener Bezeichnung, sondern in einen darin verschachtelten, möglicherweise ebenfalls markierten Block eingebunden werden ). Das bedeutet, dass Sie einen markierten Operator verwenden können, breakum einer Reihe verschachtelter Blöcke zu entkommen. Sie können jedoch keinen breakCodeblock verwenden, der keine enthält break. Um einen Block zu benennen, platzieren Sie eine Beschriftung am Anfang des Blocks (vor der öffnenden geschweiften Klammer). Eine Bezeichnung ist ein beliebiger gültiger Java-Bezeichner, gefolgt von einem Doppelpunkt. Nachdem ein Block beschriftet wurde, kann seine Beschriftung als Argument für den Operator verwendet werden break. Dadurch wird die Ausführung am Ende des markierten Blocks fortgesetzt. Das folgende Programm enthält beispielsweise drei verschachtelte Blöcke mit jeweils eigenem Label. Der Operator breakbewegt sich vorwärts, über das Ende des mit der Beschriftung markierten Blocks hinaus secondund überspringt zwei Operatoren println().
// Использование break Wie цивoderзованной формы goto.
public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
Das Ausführen dieses Programms erzeugt die folgende Ausgabe:
Перед оператором break.
Данный оператор размещен после блока second.
Eine der häufigsten Anwendungen des Label-Operators breakbesteht darin, verschachtelte Schleifen zu umgehen. Im folgenden Programm wird beispielsweise die äußere Schleife nur einmal ausgeführt:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 100; j++) {

        if (j == 10) {
          break outer; // выйти из обоих циклов
        }
        System.out.print(j + " ");
      }
      System.out.println("Эта строка никогда не будет выведена");
    }
    System.out.println("Цикл завершен.");
  }
}
Das Programm generiert die folgende Ausgabe:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Es ist leicht zu erkennen, dass beide Schleifen enden, wenn die innere Schleife vor dem Ende der äußeren unterbrochen wird. Beachten Sie, dass Sie keinen breakSprung zu einer Beschriftung durchführen können, die nicht für den umschließenden Block definiert ist. Das folgende Programm ist beispielsweise ungültig und lässt sich nicht kompilieren:
// Эта программа содержит ошибку.
public class BreakErr {

  public static void main(String[] args) {
    one:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
    }
    for (int j = 0; j < 100; j++) {
      if (j == 10) {
        break one; //He верно!
      }
      System.out.print(j + " ");
    }
  }
}
Da eine mit Eins gekennzeichnete Schleife keine Anweisung enthält break, ist es nicht möglich, die Kontrolle an diesen Block zu übergeben.

Verwendung des Operatorscontinue

Manchmal ist es sinnvoll, die nächste Iteration einer Schleife frühzeitig zu starten. Das heißt, Sie müssen mit der Ausführung der Schleife fortfahren, aber die Verarbeitung des restlichen Codes in ihrem Körper für diese bestimmte Iteration beenden. Tatsächlich handelt es sich hierbei um einen gotoÜbergang über die nächsten Körperoperationen hinaus zum Ende des Schleifenblocks. Diese Aktion wird vom Bediener ausgeführt continue. In Schleifen bewirkt der Operator while„and“ , dass die Steuerung direkt an den Bedingungsausdruck übergeben wird, der die Schleife steuert. In einer Schleife geht die Kontrolle zunächst an den iterativen Teil der Anweisung und dann an den bedingten Ausdruck über. Bei allen drei Schleifen wird jeglicher Zwischencode umgangen. Nachfolgend finden Sie ein Beispielprogramm, das zwei Zahlen in jede Zeile druckt:do whilecontinueforforcontinue
// Демонстрирует continue.
public class Continue {

  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      System.out.print(i + " ");
      if (i % 2 == 0) {
        continue;
      }
      System.out.println("");
    }
  }
}
Dieser Code verwendet die Operation %(Modulo), um zu prüfen, ob etwas igerade ist. Wenn dies der Fall ist, wird die Schleife fortgesetzt, ohne dass ein Zeilenumbruchzeichen ausgegeben wird. Programmausgabe:
0 1
2 3
4 5
6 7
8 9
Wie beim Operator break, continuekönnen Sie eine Beschriftung definieren, die angibt, welche umschließende Schleife fortgesetzt werden soll. Ein Beispielprogramm, das continueeine dreieckige Multiplikationstabelle von 0 bis 9 druckt.
// Использование continue с меткой.
public class ContinueLabel {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
        if (j > i) {
          System.out.println();
          continue outer;
        }
        System.out.print(" " + (i * j));
      }
    }
    System.out.println();
  }
}
Die Anweisung continuein diesem Beispiel beendet die Schleife mit der Auswertung jund fährt mit der nächsten Iteration der Schleife fort, die von gesteuert wird i. Ausgabe dieses Programms:
0
 0 1
 0 2 4
 0 3 6 9
 0 4 8 12 16
 0 5 10 15 20 25
 0 6 12 18 24 30 36
 0 7 14 21 28 35 42 49
 0 8 16 24 32 40 48 56 64
 0 9 18 27 36 45 54 63 72 81
Es ist äußerst selten nützlich continue. Ein Grund dafür ist, dass Java einen umfangreichen Satz an Schleifenanweisungen bereitstellt, die für die meisten Anwendungen geeignet sind. Für besondere Situationen, in denen es erforderlich ist, die Iteration vorzeitig zu beenden, continuebietet die Anweisung jedoch eine strukturierte Möglichkeit, diese Aufgabe zu erfüllen.

Operatorreturn

Die letzte Steueranweisung lautet return. Es wird verwendet, um explizit von einer Methode zurückzukehren, d. h. es überträgt die Programmsteuerung zurück an das aufrufende Programm. Der Operator returnwird als Übergangsoperator klassifiziert. Obwohl die vollständige Diskussion warten muss, bis die Methoden besprochen werden, wird hier ein kurzer Überblick gegeben return. Der Operator returnkann an einer beliebigen Stelle in einer Methode verwendet werden, um zu dem Programm zurückzukehren, das die Methode aufruft. Die Anweisung returnbeendet sofort die Ausführung der Methode, in der sie sich befindet. Das folgende Beispiel verdeutlicht dies:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Dies returnkehrt zur Laufzeit zum Java-System zurück, da es das System ist, das die aufruft main(). Ausgabe dieses Programms:
Перед оператором return.
Möglicherweise stellen Sie fest, dass die Schlussanweisung println()nicht ausgeführt wird. Zur Ausführungszeit returnwird die Kontrolle wieder an das aufrufende Programm übergeben. Eine letzte Anmerkung. Im vorherigen Programm ifist der (t)-Operator erforderlich. Ohne sie würde der Java-Compiler einen „Unerreichbarer Code“-Fehler auslösen, da er wüsste, dass die letzte Anweisung println()niemals ausgeführt würde. Um diesen Fehler zu verhindern, wird der (t)-Operator verwendet if; er täuscht den Compiler für diese Demonstration. Link zur Originalquelle: Übergangsoperatoren
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION