JavaRush /Java-Blog /Random-DE /Verzweigung in Java

Verzweigung in Java

Veröffentlicht in der Gruppe Random-DE
In diesem Artikel betrachten wir das Konzept der Verzweigung in Computerprogrammen im Allgemeinen und in Java geschriebenen Programmen. Sprechen wir über Kontrollstrukturen wie:
  • if-then(oder if)
  • if-then-else(oder if-else)
  • switch-case
Verzweigung in Java - 1

Verzweigung

Beginnen wir mit den Grundkonzepten. Jedes Programm ist eine Reihe von Befehlen, die von einem Computer ausgeführt werden. Am häufigsten werden Befehle nacheinander ausgeführt. Etwas seltener (aber immer noch recht häufig) treten Situationen auf, in denen Sie den sequentiellen Ablauf von Programmbefehlen ändern müssen. Abhängig von bestimmten Bedingungen kann es manchmal erforderlich sein, einen Befehlsblock anstelle eines anderen auszuführen. Und wenn sich diese Bedingungen ändern, tun Sie das Gegenteil. Beispielsweise gibt es eine Reihe von Websites, deren Besuch für Personen unter 18 Jahren verboten ist. Normalerweise wird der Benutzer beim ersten Besuch einer solchen Ressource mit einem Formular begrüßt, in dem er auf die Altersgrenze hingewiesen und aufgefordert wird, sein Geburtsdatum einzugeben. Abhängig von den vom Benutzer eingegebenen Daten wird ihm dann entweder der Zugriff auf die Ressource gestattet oder nicht. Diese Funktionalität wird durch das bereitgestellt, was allgemein als Verzweigung bezeichnet wird. Lassen Sie uns eine andere Analogie geben. Stellen wir uns vor, wir stehen an der Kreuzung von sieben Straßen. Wir stehen vor der Wahl: nach links oder rechts abbiegen oder geradeaus gehen. Unsere Wahl basiert auf bestimmten Bedingungen. Wir haben auch nicht die Möglichkeit, mehrere Straßen gleichzeitig zu befahren. Diese. Abhängig von einigen Bedingungen müssen wir uns für eine Straße entscheiden. Das gleiche Prinzip gilt für die Verzweigung. Versuchen wir nun, eine Definition der Verzweigung zu geben. Verzweigung ist eine algorithmische Konstruktion, bei der abhängig von der Wahrheit einer Bedingung eine von mehreren Aktionsfolgen ausgeführt wird. Branching ist (höchstwahrscheinlich) in absolut allen Programmiersprachen implementiert. Die Programmiersprache Java verfügt über mehrere sogenannte Kontrollkonstrukte, mit denen Sie Verzweigungen in Ihrem Programm implementieren können. In der Programmiersprache gibt es 3 solcher Konstruktionen:
  • Operatorif-then
  • Operatorif-then-else
  • Ternärer Operator? :
if-elseIn diesem Artikel werden wir uns die Operatoren „ and“ und „and“ ansehen switch-case.

wenn, dann

Operator if-thenoder einfach ifder vielleicht gebräuchlichste Operator. Der Ausdruck „Ja, schreibe 1 wenn“ ist bereits populär geworden. Der Operator ifhat die folgende Struktur:
if (bool_condition) {
	statement
}
In diesem Design:
  • bool_conditionist ein boolescher Ausdruck, der als wahr oder falsch ausgewertet wird. Dieser Ausdruck wird als Bedingung bezeichnet.
  • statement– ein Befehl (es können mehrere sein), der ausgeführt werden muss, wenn die Bedingung wahr ist ( bool_statement==true)
Diese Konstruktion kann folgendermaßen gelesen werden:

Если (bool_condition), то {statement}
Hier sind einige Beispiele:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    }
}
In diesem Programm wird der Benutzer aufgefordert, den Prozentsatz der Akkuladung seines Smartphones einzugeben. Wenn weniger als 10 Prozent der Ladung verbleiben, warnt das Programm den Benutzer, dass das Smartphone aufgeladen werden muss. Dies ist ein Beispiel für das einfachste Design if. Es ist erwähnenswert, dass nichts passiert, wenn die Variable „a“ größer oder gleich 10 ist. Das Programm führt weiterhin den folgenden Code aus if. Beachten Sie außerdem, dass das Konstrukt in diesem Fall ifnur eine Folge von Aktionen ausführen muss: den Text drucken oder nichts tun. Dies ist eine Variation der Verzweigung mit einem „Zweig“. Dies ist manchmal notwendig. Zum Beispiel, wenn wir uns vor falschen Werten schützen wollen. Beispielsweise können wir die Anzahl der Buchstaben in einer Zeichenfolge nicht ermitteln, wenn die Zeichenfolge lautet null. Beispiele unten:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    }
}
Als Ergebnis der Ausführung der Hauptmethode wird Folgendes an die Konsole ausgegeben:

Количество символов в строке `Не представляю своей жизни без ветвлений...`=43
Количество символов в строке `Ифы это так захватывающе!`=25
Dank dieser Überprüfung string != nullkonnten wir Fehler im Programm vermeiden. Und tun Sie nichts, wenn die Variable stringgleich war null.

Wenn-dann-sonst

Wenn ifein Programm unter normalen Bedingungen die Wahl hat: „etwas tun oder nichts tun“, if-elsekommt es bei der Auswahl eines Programms darauf an, „entweder das eine oder das andere zu tun“. Die Option „Nichts tun“ verschwindet. Bei dieser Art der Verzweigung gibt es zwei oder mehr Ausführungsvarianten (bzw. Anzahl der Verzweigungen). Betrachten wir den Fall, dass es zwei Möglichkeiten gibt. Dann hat die Kontrollstruktur folgende Form:
if (bool_condition) {
	statement1
} else {
	statement2
}
Hier:
  • bool_statementist ein boolescher Ausdruck, der als wahr oder falsch ausgewertet wird. Dieser Ausdruck wird als Bedingung bezeichnet.
  • statement1– ein Befehl (es können mehrere sein), der ausgeführt werden muss, wenn die Bedingung wahr ist ( bool_statement==true)
  • statement2– ein Befehl (es können mehrere sein), der ausgeführt werden muss, wenn die Bedingung falsch ist ( bool_statement==false)
Diese Konstruktion kann folgendermaßen gelesen werden:

Если (bool_condition), то {statement1}
Иначе {statement2}
Hier ist ein Beispiel:
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a < 10) {
        System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
    } else {
        System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
    }
}
Das gleiche Beispiel zum Akkustand eines Smartphones. Nur wenn das Programm beim letzten Mal nur vor der Notwendigkeit gewarnt hat, das Smartphone aufzuladen, haben wir dieses Mal eine zusätzliche Benachrichtigung. Schauen wir uns das hier an if:
if (a < 10) {
    System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству");
} else {
    System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush");
}
Bei a < 10„true“ (Batteriestand unter 10) druckt das Programm einen Text. Andernfalls, wenn die Bedingung a < 10nicht erfüllt ist, gibt das Programm einen völlig anderen Text aus. Lassen Sie uns auch unser zweites Beispiel abschließen, in dem wir die Anzahl der Buchstaben in einer Zeile angezeigt haben. Das letzte Mal hat das Programm nichts ausgegeben, wenn die übergebene Zeichenfolge gleich war null. Lassen Sie uns das beheben, indem wir das normale ifin Folgendes umwandeln if-else:
public static void main(String[] args) {
    String x = null;
    printStringSize(x);
    printStringSize("Не представляю своей жизни без ветвлений...");
    printStringSize(null);
    printStringSize("Ифы это так захватывающе!");
}

static void printStringSize(String string) {
    if (string != null) {
        System.out.println("Кол-во символов в строке `" + string + "`=" + string.length());
    } else {
        System.out.println("Ошибка! Переданная строка равна null!");
    }
}
In der Methode haben wir printStringSizeder Konstruktion einen Block hinzugefügt . Wenn wir nun das Programm ausführen, werden nicht zwei, sondern vier Zeilen an die Konsole ausgegeben, obwohl die Eingabe (Methode ) dieselbe wie beim letzten Mal bleibt. Der Text, den das Programm ausgibt: ifelsemain

Ошибка! Переданная строка равна null!
Кол-во символов в строке `Не представляю своей жизни без ветвлений...`=43
Ошибка! Переданная строка равна null!
Кол-во символов в строке `Ифы это так захватывающе!`=25
Situationen sind akzeptabel, wenn elseihnen keine Ausführungsbefehle folgen, sondern ein weiterer if. Dann nimmt die Konstruktion folgende Form an:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
} else {
	statementN+1
}
Für dieses Design gelten mehrere Bedingungen:
  • bool_condition1
  • bool_condition2
  • bool_conditionN
Die Anzahl solcher Bedingungen ist nicht begrenzt. Jede Bedingung hat ihre eigenen Befehle:
  • Aussage1
  • Aussage2
  • AussageN
Jede statementkann eine oder mehrere Codezeilen enthalten. Die Bedingungen werden einzeln überprüft. Sobald die erste wahre Bedingung ermittelt ist, wird eine Reihe von Befehlen ausgeführt, die an die wahre Bedingung „gebunden“ sind. Nach der Ausführung dieser Befehle verlässt das Programm den Block if, auch wenn noch weitere Prüfungen anstehen. Der Ausdruck „AnweisungN+1“ wird ausgeführt, wenn keine der oben definierten Bedingungen wahr ist. Diese Konstruktion kann folgendermaßen gelesen werden:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Иначе {statementN+1}
Die letzte Zeile ist in diesem Fall optional. Auf den letzten Einsamen kann man verzichten else. Und dann wird das Design die folgende Form annehmen:
If (bool_condition1) {
	statement1
} else if (bool_condition2) {
	statement2
} else if (bool_conditionN) {
	statementN
}
Und es wird so lauten:

Если (bool_condition1) то {statement1}
Иначе если (bool_condition2) то {statement2}
Иначе если (bool_conditionN) то {statementN}
Wenn also keine der Bedingungen zutrifft, wird kein einziger Befehl ausgeführt. Kommen wir zu den Beispielen. Kehren wir zur Situation mit dem Ladezustand des Smartphones zurück. Schreiben wir ein Programm, das den Besitzer detaillierter über den Ladezustand seines Geräts informiert:
public static void main(String[] args) {
    String alert5 = "Я скоро отключусь, но помни меня бодрым";
    String alert10 = "Я так скучаю по напряжению в моих жилах";
    String alert20 = "Пора вспоминать, где лежит зарядка";
    String alert30 = "Псс, пришло время экономить";
    String alert50 = "Хм, больше половины израсходовали";
    String alert75 = "Всё в порядке, заряда больше половины";
    String alert100 = "Я готов к приключениям, если что..";
    String illegalValue = "Такс, кто-то ввел некорректное Bedeutung";

    Scanner scanner = new Scanner(System.in);
    System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?");
    int a = scanner.nextInt();

    if (a <= 0 || a > 100) {
        System.out.println(illegalValue);
    } else if (a < 5) {
        System.out.println(alert5);
    } else if (a < 10) {
        System.out.println(alert10);
    } else if (a < 20) {
        System.out.println(alert20);
    } else if (a < 30) {
        System.out.println(alert30);
    } else if (a < 50) {
        System.out.println(alert50);
    } else if (a < 75) {
        System.out.println(alert75);
    } else if (a <= 100) {
        System.out.println(alert100);
    }
}
Wenn der Benutzer in diesem Fall beispielsweise 15 eingibt, zeigt das Programm auf dem Bildschirm an: „Es ist Zeit, sich zu merken, wo sich das Ladegerät befindet.“ Trotz der Tatsache, dass 15 kleiner ist und 30 und 50 und 75 und 100, wird auf dem Bildschirm nur 1 ausgegeben. Schreiben wir eine weitere Anwendung, die auf der Konsole ausgibt, welcher Wochentag heute ist:
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    if (dayOfWeek == DayOfWeek.SUNDAY) {
        System.out.println("Сегодня воскресенье");
    } else if (dayOfWeek == DayOfWeek.MONDAY) {
        System.out.println("Сегодня понедельник");
    } else if (dayOfWeek == DayOfWeek.TUESDAY) {
        System.out.println("Сегодня вторник");
    } else if (dayOfWeek == DayOfWeek.WEDNESDAY) {
        System.out.println("Сегодня среда");
    } else if (dayOfWeek == DayOfWeek.THURSDAY) {
        System.out.println("Сегодня четверг");
    } else if (dayOfWeek == DayOfWeek.FRIDAY) {
        System.out.println("Сегодня пятница");
    } else if (dayOfWeek == DayOfWeek.SATURDAY) {
        System.out.println("Сегодня суббота");
    }
}
Das ist natürlich praktisch, aber die Fülle an eintönigem Text blendet die Augen ein wenig. In Situationen, in denen wir viele Optionen haben, ist es besser, den Operator zu verwenden, der weiter unten besprochen wird.

Schaltergehäuse

Eine Alternative zu Bold ifmit vielen Verzweigungen ist der Operator switch-case. Dieser Operator scheint zu sagen: „Wir haben also diese Variable. Schauen Sie, wenn sein Wert gleich „x“ ist, dann machen wir dies und das, wenn sein Wert gleich „y“ ist, dann machen wir es anders, und wenn er keinem der oben genannten entspricht, machen wir es einfach Es sieht so aus...“ Dieser Operator hat die folgende Struktur.
switch (argument) {
	case value1:
		statement1;
		break;
	case value2:
		statement2;
		break;
	case valueN:
		statementN;
		break;
	default:
		default_statement;
		break;
}
Schauen wir uns diese Struktur genauer an. argument ist eine Variable, deren Wert wir mit hypothetischen verschiedenen Optionen vergleichen werden. Die Variable muss sein final. Es ist auch erwähnenswert, dass der Operator switchkeinen Datentyp als Argument unterstützt. Gültige Typen sind unten aufgeführt:
  • Byte und Byte
  • kurz und knapp
  • int und Integer
  • Char und Charakter
  • Aufzählung
  • Zeichenfolge
case value1 (value2, valueN)- das sind Werte, spezifische Konstanten, mit denen wir den Wert einer Variablen vergleichen argument. Außerdem definiert jeder Fall eine Reihe von Befehlen, die ausgeführt werden müssen. statement1, statement2, statementNsind Befehle, die ausgeführt werden müssen, wenn argumentsich herausstellt, dass sie einem von entsprechen value. Wenn es beispielsweise argumentgleich ist value2, wird das Programm ausgeführt statement2. defaultund default_statementsind „Standardwerte“. Wenn argumentes keinem der angezeigten Werte entspricht value, wird die Verzweigung ausgelöst defaultund der Befehl ausgeführt default_statement. defaultund default_statementsind optionale Attribute des Operators switch-case. break– Sie können feststellen, dass am Ende jedes case-Blocks eine Anweisung steht break. Auch dieser Operator ist optional und dient der Unterscheidung des Codes verschiedener Fälle. Manchmal ist es notwendig, die gleichen Aktionen in verschiedenen Fällen durchzuführen: Dann können diese Fälle kombiniert werden. In diesem Fall breakwird das Schlüsselwort weggelassen und die Struktur des Operators switch-casesieht folgendermaßen aus:
switch (argument) {
	case value1:
		statement1;
		break;
	case valueX:
	case valueY:
		statementXY;
		break;
}
Es ist erwähnenswert, dass es keinen Operator zwischen „case valueX:“ und „case valueY:“ gibt break. Wenn es hier argumentgleich ist value1, wird es ausgeführt statement1. Und wenn das Argument valueXentweder gleich ist valueY, statementXY. Lassen Sie uns die schwer verständliche Theorie in eine leicht verständliche Praxis umwandeln. Schreiben wir das Beispiel mit Wochentagen unter Verwendung des Operators um switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
            System.out.println("Сегодня воскресенье");
            break;
        case MONDAY:
            System.out.println("Сегодня понедельник");
            break;
        case TUESDAY:
            System.out.println("Сегодня вторник");
            break;
        case WEDNESDAY:
            System.out.println("Сегодня среда");
            break;
        case THURSDAY:
            System.out.println("Сегодня четверг");
            break;
        case FRIDAY:
            System.out.println("Сегодня пятница");
            break;
        case SATURDAY:
            System.out.println("Сегодня суббота");
            break;
    }
}
Schreiben wir nun ein Programm, das mithilfe des Operators anzeigt, ob heute ein Wochentag oder ein Wochenende ist switch-case.
public static void main(String[] args) {
    // Определим текущий день недели
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();

    switch (dayOfWeek) {
        case SUNDAY:
        case SATURDAY:
            System.out.println("Сегодня выходной");
            break;
        case FRIDAY:
            System.out.println("Завтра выходной");
            break;
        default:
            System.out.println("Сегодня рабочий день");
            break;

    }
}
Lassen Sie mich das kurz erklären. In diesem Programm erhalten wir enum DayOfWeek, was den aktuellen Wochentag angibt. Als nächstes prüfen wir, ob der Wert unserer Variablen mit dayOfWeekden Werten von SUNDAYbeiden übereinstimmt SATURDAY. In diesem Fall zeigt das Programm „Heute ist ein freier Tag“ an. Wenn nicht, prüfen wir, ob der Wert der Variablen dayOfWeekdem Wert von entspricht FRIDAY. Wenn dies der Fall ist, zeigt das Programm „Morgen ist ein freier Tag“ an. Wenn dies in diesem Fall nicht der Fall ist, haben wir nur wenige Optionen. Jeder verbleibende Tag ist ein Wochentag. Wenn also heute NICHT Freitag, NICHT Samstag und NICHT Sonntag ist, zeigt das Programm standardmäßig „Heute ist ein Arbeitstag“ an.

Abschluss

In diesem Artikel haben wir uns daher mit der Verzweigung in einem Computerprogramm befasst. Wir haben auch herausgefunden, welche Kontrollstrukturen verwendet werden, um Verzweigungen in Java zu implementieren. Wir besprachen Designs wie:
  • if-then
  • if-then-else
  • switch-case
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION