Kapitel: Logik

Mehrere Vergleiche

Befehl: &&, ||

Im letzten Schritt (Wiederholungen) hast du while, do-while und for kennengelernt. Bisher hatten unsere Bedingungen aber immer nur einen einzigen Vergleich, z.B. alter >= 18. Was, wenn du mehrere Bedingungen gleichzeitig prüfen willst? Dafür gibt es zwei weitere Operatoren: && und ||.

&& (UND)

&& verbindet zwei Bedingungen und ist nur dann true, wenn beide Seiten true sind.

int alter = 15;

if (alter >= 13 && alter < 18)
{
    Console.WriteLine("Du bist ein Jugendlicher.");
}
Erinnerst du dich an die else-if-Kette aus dem Kapitel Bedingungen, die alter in Kind, Jugendlicher und Erwachsener eingeteilt hat? Die mittlere Bedingung hätten wir mit && auch direkt so in einer einzigen if-Zeile schreiben können, ganz ohne else if.

|| (ODER)

|| verbindet zwei Bedingungen und ist schon dann true, wenn mindestens eine der beiden Seiten true ist.

string eingabe;
bool ungueltig;

do
{
    Console.Write("Gib eine Zahl ein: ");
    eingabe = Console.ReadLine();
    ungueltig = eingabe == "" || char.IsDigit(eingabe[0]) == false;

    if (ungueltig)
    {
        Console.WriteLine("Das war keine gültige Zahl, versuch es nochmal.");
    }
}
while (ungueltig);
Hier passiert etwas Wichtiges: C# prüft && und || von links nach rechts und hört früh auf, sobald das Ergebnis feststeht - man nennt das Kurzschlussauswertung. Ist eingabe ein leerer Text, ist die linke Seite von || bereits true - das Gesamtergebnis steht dann schon fest, und char.IsDigit(eingabe[0]) wird gar nicht erst ausgeführt. Genau deshalb stürzt dieser Code nicht ab, selbst wenn einfach nur Enter gedrückt wird - endlich lösen wir das Problem, vor dem wir die ganze Zeit gewarnt haben!

&& und || in einer for-Schleife

Diese Operatoren funktionieren genauso in jeder anderen Bedingung - auch im Kopf einer for-Schleife. Erinnerst du dich an das Einmaleins aus Wiederholungen? Mit && können wir die Ausgabe zusätzlich begrenzen, sobald das Ergebnis zu gross wird:

Console.Write("Für welche Zahl möchtest du das Einmaleins sehen? ");
int zahl = int.Parse(Console.ReadLine());

for (int i = 1; i <= 10 && zahl * i <= 50; i++)
{
    Console.WriteLine(zahl + " x " + i + " = " + (zahl * i));
}
Die Schleife läuft jetzt nur noch, solange i <= 10 UND das Ergebnis zahl * i <= 50 ist. Bei zahl = 3 werden also alle zehn Zeilen ausgegeben (3 x 10 = 30), bei zahl = 20 aber nur noch zwei (20 x 1 = 20, 20 x 2 = 40) - danach wäre 20 x 3 = 60 schon zu gross.

Kurz zusammengefasst: Mit && kombinierst du zwei Bedingungen, die beide zutreffen müssen, mit || reicht es, wenn mindestens eine zutrifft. Beide funktionieren in if, while, do-while und for genau gleich - und dank Kurzschlussauswertung werden nicht benötigte Bedingungen erst gar nicht geprüft.

Damit hast du jetzt alle Bausteine beisammen, die du für dein erstes richtiges Projekt brauchst: Was können wir schon? Ein Taschenrechner.