Alle Tabs der Lerneinheit (Erklärung · Interaktiv · Übung · Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
Bedingungen lassen dein Programm Entscheidungen treffen: "wenn die Bedingung wahr ist, mach X, sonst Y". Sie gehören in Java, Python und vielen anderen imperativen Sprachen zu den wichtigsten Kontrollstrukturen, ohne sie laufen Programme nur Schritt für Schritt ohne Auswahlentscheidung. Du lernst hier, wie du if/else/else if-Ketten korrekt schreibst, welche Vergleichs- und Logik-Operatoren in welcher Reihenfolge ausgewertet werden, wie Short-Circuit-Evaluation funktioniert und welche drei Stolperfallen in Klausuren regelmäßig Punkte kosten: Zuweisung statt Vergleich (= vs ==), String-Vergleich in Java mit == statt equals(), und falsche Reihenfolge in else-if-Ketten.
Schauen wir uns zunächst die Bausteine an, aus denen jede Bedingung zusammengesetzt ist. Eine Bedingung besteht typischerweise aus zwei Teilen: einem Vergleich (z.B. x > 5), der einen Wahrheitswert ergibt, und optional einer logischen Verknüpfung mehrerer Vergleiche (x > 5 && y < 10). Darum herum baust du die if/else-Struktur, die entscheidet, was passiert. Die wichtigsten Bausteine sind in diesen drei Kategorien:
Verzweigung:
Vergleich: ==, !=, <, >, <=, >=
Logik (Verknüpfung):
&& (logisches UND), || (logisches ODER), ! (logisches NICHT)and, or, not (gleiche Semantik, aber Python liefert bei Mischtypen den letzten ausgewerteten Operanden statt eines reinen Booleans zurück, z.B. 0 or "fallback" ergibt "fallback")In Klausuren wirst du oft gefragt: welche Ausgabe produziert dieser Code?. Achte auf die Reihenfolge der Bedingungen, else-if-Ketten werden von oben nach unten geprüft, der erste Treffer gewinnt. Hinzu kommt die häufigste Falle: == ist Vergleich, = ist Zuweisung. In Java ist if (x = 5) bei int ein Compile-Fehler (kein boolean); in Python ist if x = 5: ein Syntaxfehler.
int note = 2;
if (note <= 4) {
System.out.println("Bestanden");
} else {
System.out.println("Durchgefallen");
}Wenn note <= 4 wahr ist, wird der erste Block ausgeführt. Wenn nicht, der zweite. Nie beide.
if (note <= 1.5) {
System.out.println("Sehr gut");
} else if (note <= 2.5) {
System.out.println("Gut");
} else if (note <= 4.0) {
System.out.println("Bestanden");
} else {
System.out.println("Durchgefallen");
}Bedingungen werden von oben nach unten geprüft. Sobald eine wahr ist, wird der zugehörige Block ausgeführt und alle weiteren else-if-Bedingungen werden übersprungen.
Beobachte: Sobald eine Bedingung wahr ist, werden die folgenden gar nicht mehr geprüft, bei einer if/else-if-Kette gewinnt der erste passende Branch.
Wichtig zur Abgrenzung: Das ist ein anderes Konzept als die Short-Circuit-Evaluation (oben im Erklärungs-Tab erklärt). Die if-else-if-Kette wird sequenziell Branch für Branch geprüft. Short-Circuit dagegen passiert innerhalb eines einzelnen logischen Ausdrucks wie
a && bodera || bund überspringt den zweiten Operanden wenn das Ergebnis schon feststeht. Beide Mechanismen kürzen ab, aber auf unterschiedlichen Ebenen.
&&): zweite Bedingung wird übersprungenSetup: stell dir vor, im Hintergrund existiert eine Methode pruefe() die zwei Dinge tut: (1) sie erhöht eine globale Zähler-Variable counter um 1, und (2) sie gibt immer true zurück. So eine Methode mit Side-Effect ist typisch für Klausuren um zu prüfen, ob du Short-Circuit verstanden hast. Beobachte im Stepper: wenn die erste Bedingung schon false ist, wird pruefe() GAR NICHT aufgerufen, Counter bleibt bei 0.
||): Default-Wert via KurzschlussKlassisches Python-Idiom: name = eingabe or "Anonym". Wenn eingabe truthy ist, wird "Anonym" gar nicht ausgewertet. Hier mit null-Check vor Methodenaufruf, schützt vor NullPointerException.
&& bindet stärker als ||In x > 0 && y < 10 || admin wird das Ergebnis bestimmt von der Bindungsstärke: && zuerst, || zuletzt. Effektiv: (x > 0 && y < 10) || admin. Hier mit x = -5, y = 5, admin = true.
Vervollständige das Programm. note ist bereits gesetzt, du musst nur die if-else-Kette ergänzen.
Anmelden, um den Fortschritt zu speichern.
Nächster Schritt
Aktives Abrufen festigt Wissen schneller als nochmal lesen.
Diese Lerneinheit wurde für typische Bachelor-Klausuren konzipiert. So prüfen wir · Fehler entdeckt? Melde ihn uns oder markiere die fragliche Stelle direkt im Text oben.
Alle Tabs der Lerneinheit (Erklärung · Interaktiv · Übung · Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).
Bedingungen lassen dein Programm Entscheidungen treffen: "wenn die Bedingung wahr ist, mach X, sonst Y". Sie gehören in Java, Python und vielen anderen imperativen Sprachen zu den wichtigsten Kontrollstrukturen, ohne sie laufen Programme nur Schritt für Schritt ohne Auswahlentscheidung. Du lernst hier, wie du if/else/else if-Ketten korrekt schreibst, welche Vergleichs- und Logik-Operatoren in welcher Reihenfolge ausgewertet werden, wie Short-Circuit-Evaluation funktioniert und welche drei Stolperfallen in Klausuren regelmäßig Punkte kosten: Zuweisung statt Vergleich (= vs ==), String-Vergleich in Java mit == statt equals(), und falsche Reihenfolge in else-if-Ketten.
Schauen wir uns zunächst die Bausteine an, aus denen jede Bedingung zusammengesetzt ist. Eine Bedingung besteht typischerweise aus zwei Teilen: einem Vergleich (z.B. x > 5), der einen Wahrheitswert ergibt, und optional einer logischen Verknüpfung mehrerer Vergleiche (x > 5 && y < 10). Darum herum baust du die if/else-Struktur, die entscheidet, was passiert. Die wichtigsten Bausteine sind in diesen drei Kategorien:
Verzweigung:
Vergleich: ==, !=, <, >, <=, >=
Logik (Verknüpfung):
&& (logisches UND), || (logisches ODER), ! (logisches NICHT)and, or, not (gleiche Semantik, aber Python liefert bei Mischtypen den letzten ausgewerteten Operanden statt eines reinen Booleans zurück, z.B. 0 or "fallback" ergibt "fallback")In Klausuren wirst du oft gefragt: welche Ausgabe produziert dieser Code?. Achte auf die Reihenfolge der Bedingungen, else-if-Ketten werden von oben nach unten geprüft, der erste Treffer gewinnt. Hinzu kommt die häufigste Falle: == ist Vergleich, = ist Zuweisung. In Java ist if (x = 5) bei int ein Compile-Fehler (kein boolean); in Python ist if x = 5: ein Syntaxfehler.
int note = 2;
if (note <= 4) {
System.out.println("Bestanden");
} else {
System.out.println("Durchgefallen");
}note = 2
if note <= 4:
print("Bestanden")
else:
print("Durchgefallen")Wenn note <= 4 wahr ist, wird der erste Block ausgeführt. Wenn nicht, der zweite. Nie beide.
if (note <= 1.5) {
System.out.println("Sehr gut");
} else if (note <= 2.5) {
System.out.println("Gut");
} else if (note <= 4.0) {
System.out.println("Bestanden");
} else {
System.out.println("Durchgefallen");
}if note <= 1.5:
print("Sehr gut")
elif note <= 2.5:
print("Gut")
elif note <= 4.0:
print("Bestanden")
else:
print("Durchgefallen")Bedingungen werden von oben nach unten geprüft. Sobald eine wahr ist, wird der zugehörige Block ausgeführt und alle weiteren else-if-Bedingungen werden übersprungen.
| Operator | Bedeutung | Java / Python |
|---|---|---|
== | gleich | beide |
!= | ungleich | beide |
< > | kleiner / größer | beide |
<= >= | kleiner-gleich / größer-gleich | beide |
&& / and | UND | Java &&, Python and |
|| / or | ODER | Java ||, Python or |
! / not | NICHT | Java !, Python not |
Java
==bei Objekten:==vergleicht bei primitiven Werten Gleichheit, bei Objekten aber Referenzgleichheit, also ob beide Variablen auf dasselbe Objekt zeigen. Für String-Inhaltsvergleich in Javas1.equals(s2)verwenden, niemalss1 == s2. Wenns1null sein kann:Objects.equals(s1, s2)oder"Konstante".equals(s1)(Reihenfolge umdrehen) nutzen, sonst NullPointerException.Tückisch im Klausur-Kontext: Bei String-Literalen in deinem Quellcode (z.B.
String a = "abc") speichert die JVM den Text in einem gemeinsamen Speicherbereich (dem String-Pool, der Vorgang heißt Interning). Wenn duString b = "abc"schreibst, zeigtbauf dieselbe Stelle wiea→a == bist zufälligtrue. Sobald die aber entstehen, sondern z.B. via , durch String-Konkatenation zur Laufzeit ( mit variablem ) oder aus User-Eingaben mit , legt Java ein an (nicht im String-Pool). Dann sind es zwei verschiedene mit gleichem Inhalt → liefert . Genau deshalb ist bei Strings besonders tückisch: es funktioniert zufällig solange du nur Literale verwendest, bis du Input-Strings vergleichst und plötzlich falsche Ergebnisse bekommst.
Die drei booleschen Verknüpfungen funktionieren in Java und Python gleich, nur die Notation unterscheidet sich. Was sie tatsächlich rechnen, zeigt die Wahrheitstabelle:
A B A && B A || B !A
(UND) (ODER) (NICHT)
───────────────────────────────────────
false false false false true
false true false true true
true false false true false
true true true true false
Merkregel: UND ist nur wahr wenn beide wahr sind, ODER ist schon wahr wenn mindestens einer wahr ist, NICHT dreht den Wert um.
Sowohl Java (&& und ||) als auch Python (and und or) werten kurzschlüssig aus: sobald das Endergebnis feststeht, wird der Rest übersprungen. Konkret:
false && X → X wird nicht ausgewertet (Ergebnis ist eh false)true || X → X wird nicht ausgewertet (Ergebnis ist eh true)Klausur-relevant wenn der zweite Operand Side-Effects hat oder zu Fehlern führen kann:
// Java: schützt vor NullPointerException
if (kunde != null && kunde.istVolljaehrig()) {
// istVolljaehrig() wird nur gerufen wenn kunde != null
}
// Java: ohne Short-Circuit würde das crashen
if (kunde.istVolljaehrig() && kunde != null) { // FALSCH herum!
// istVolljaehrig() crasht bei kunde == null
}
# Python-Idiom: Default-Wert via or
name = eingabe or "Anonym" # wenn eingabe falsy ist, nimm "Anonym"
# Python: Null-Check vor Methodenaufruf
if liste and len(liste) > 0:
print(liste[0]) # liste kann None oder leer sein, Short-Circuit schützt
Du kannst Bedingungen ineinander verschachteln. Klausur-Tipp: eine else-if-Kette ist fast immer lesbarer als drei verschachtelte if-Blöcke.
// Verschachtelt, schwerer zu lesen
if (alter >= 18) {
if (fuehrerschein) {
if (fahrzeug != null) {
System.out.println("Darf fahren");
}
}
}
// Flach mit &&, kompakter
if (alter >= 18 && fuehrerschein && fahrzeug != null) {
System.out.println("Darf fahren");
}
Aber Achtung: mehrere unabhängige if hintereinander sind nicht dasselbe wie eine if/else if/else-Kette:
// Variante A: 3 unabhängige if's, können MEHRERE Ausgaben erzeugen
if (note <= 1.5) System.out.println("Sehr gut");
if (note <= 2.5) System.out.println("Gut"); // bei note=1.0 läuft das AUCH
if (note <= 4.0) System.out.println("Bestanden"); // und das AUCH
// Variante B: else-if-Kette, genau EINE Ausgabe
if (note <= 1.5) System.out.println("Sehr gut");
else if (note <= 2.5) System.out.println("Gut");
else if (note <= 4.0) System.out.println("Bestanden");
Variante A bei note = 1.0 gibt drei Zeilen aus, Variante B genau eine. Beliebte Klausur-Falle.
Wenn ein Ausdruck mehrere Operatoren mischt, brauchst du die Priorität (welcher Operator bindet stärker). Die Reihenfolge ist in Java und Python leicht unterschiedlich für den NICHT-Operator:
JAVA (von hoch zu niedrig): PYTHON (von hoch zu niedrig):
1. Klammern () 1. Klammern ()
2. NICHT ! (Unary, hoch) 2. Vergleich == != < > <= >=
3. Vergleich == != < > <= >= 3. NICHT not (NIEDRIGER!)
4. UND && 4. UND and
5. ODER || 5. ODER or
Wichtig: In Java ist ! ein Unary-Operator und bindet sehr stark (gleich nach Klammern). In Python ist not eine Boolean-Operation (so klassifiziert in den Python-Docs) und bindet schwächer als Vergleichsoperatoren.
Konkret an einem Beispiel:
// Java: ! bindet vor ==
boolean ergebnis = !a == b;
// → ausgewertet als (!a) == b
// → erst Negation, dann Vergleich
# Python: not bindet NACH ==
ergebnis = not a == b
# → ausgewertet als not (a == b)
# → erst Vergleich, dann Negation
Ehrliche Anmerkung: Bei zwei einfachen booleans sind beide Ausdrücke semantisch gleich (a != b), nur der Auswertungspfad unterscheidet sich. Der Unterschied wird relevant wenn:
! vs && vs == in Java; not vs and vs == in Python) und Klammern fehlenFaustregel: bei Unsicherheit IMMER Klammern setzen, dann sind beide Sprachen eindeutig: !(a == b) in Java, not (a == b) in Python.
Mini-Beispiel für die häufigste Klausur-Verwechslung:
// Java: x > 0 && y < 10 || admin
// wird ausgewertet als:
// (x > 0 && y < 10) || admin
// NICHT als:
// x > 0 && (y < 10 || admin)
int x = -5, y = 5;
boolean admin = true;
if (x > 0 && y < 10 || admin) {
// ergibt: (false && true) || true = false || true = true
System.out.println("Treffer");
}
Klausur-Tipp: wenn du dir bei einer Reihenfolge unsicher bist, Klammern setzen statt sich auf Priorität zu verlassen. Das macht den Code lesbar und vermeidet typische Bewertungsabzüge bei Tracing-Aufgaben.
Schieb den Regler hin und her und beobachte welcher Branch greift. Zur Laufzeit werden die Bedingungen von oben nach unten ausgewertet, der erste wahre Branch wird ausgeführt.
Interaktive Visualisierung
Visualisiert if/else-Entscheidungen mit Live-Bedingung und gewähltem Pfad.
Beobachte: Sobald eine Bedingung wahr ist, werden die folgenden gar nicht mehr geprüft, bei einer if/else-if-Kette gewinnt der erste passende Branch.
Wichtig zur Abgrenzung: Das ist ein anderes Konzept als die Short-Circuit-Evaluation (oben im Erklärungs-Tab erklärt). Die if-else-if-Kette wird sequenziell Branch für Branch geprüft. Short-Circuit dagegen passiert innerhalb eines einzelnen logischen Ausdrucks wie
a && bodera || bund überspringt den zweiten Operanden wenn das Ergebnis schon feststeht. Beide Mechanismen kürzen ab, aber auf unterschiedlichen Ebenen.
Vier interaktive Demos zu Bedingungen und Short-Circuit. Klick Step oder Auto und beobachte, wie Variablen sich ändern, welche Branches gewählt werden und wo Short-Circuit greift. Die Annotation unter dem Code erklärt jeden Schritt.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
&&): zweite Bedingung wird übersprungenSetup: stell dir vor, im Hintergrund existiert eine Methode pruefe() die zwei Dinge tut: (1) sie erhöht eine globale Zähler-Variable counter um 1, und (2) sie gibt immer true zurück. So eine Methode mit Side-Effect ist typisch für Klausuren um zu prüfen, ob du Short-Circuit verstanden hast. Beobachte im Stepper: wenn die erste Bedingung schon false ist, wird pruefe() GAR NICHT aufgerufen, Counter bleibt bei 0.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
||): Default-Wert via KurzschlussKlassisches Python-Idiom: name = eingabe or "Anonym". Wenn eingabe truthy ist, wird "Anonym" gar nicht ausgewertet. Hier mit null-Check vor Methodenaufruf, schützt vor NullPointerException.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
&& bindet stärker als ||In x > 0 && y < 10 || admin wird das Ergebnis bestimmt von der Bindungsstärke: && zuerst, || zuletzt. Effektiv: (x > 0 && y < 10) || admin. Hier mit x = -5, y = 5, admin = true.
Interaktive Visualisierung
Interaktive Komponente: probiere sie im Topic-Player oben aus.
Schreibe ein Programm, das je nach Note (1.0 bis 5.0) den passenden Text ausgibt: "Sehr gut" für Noten bis 1.5, "Gut" bis 2.5, "Bestanden" bis 4.0, sonst "Durchgefallen".
Aufgabe / Code-Übung
Vervollständige das Programm. note ist bereits gesetzt, du musst nur die if-else-Kette ergänzen.
note = 2.3
# TODO: if-elif-else-Kette mit allen 4 Fällen
Erwartete Ausgabe
GutAufgabe / Code-Übung
Vervollständige das Programm. note ist bereits gesetzt, du musst nur die if-else-Kette ergänzen.
public class Main {
public static void main(String[] args) {
double note = 2.3;
// TODO: if-else-Kette mit allen 4 Fällen
}
}Erwartete Ausgabe
GutSieben Fragen zu if/else, Vergleichs- und Logik-Operatoren, klausur-typisch.
Klausurfragen mit Lösungen (7)
int x = 5;
if (x > 10) {
System.out.println("A");
} else if (x > 3) {
System.out.println("B");
} else {
System.out.println("C");
}Antwort: B
Erklärung: Bedingungen werden von oben nach unten geprüft. `x > 10` ist false (5 ist nicht > 10). `x > 3` ist true → 'B' wird ausgegeben. Sobald eine Bedingung wahr ist, werden die folgenden übersprungen, daher NIE 'B und C'.
Antwort: ==
Erklärung: `==` ist der Vergleichs-Operator (Equality) für primitive Werte. **Bei Objekten** (z. B. Strings) prüft `==` aber nur Referenzgleichheit, für String-Inhaltsvergleich immer `s1.equals(s2)` nutzen. `=` ist Zuweisung, Klausur-Falle: `if (x = 5)` bei `int` ist in Java Compile-Fehler (int liefert kein boolean), in Python ist `if x = 5:` ein Syntaxfehler.
Antwort: Falsch
Erklärung: Falsch. if und else schließen sich gegenseitig aus, entweder if-Block oder else-Block, NIE beide. Genau das macht die Verzweigung aus.
Typ: Wahr/Falsch
Richtige Antworten: a < b; a != b; a >= 5
Erklärung: `a < b` (5 < 10) ✓, `a != b` (5 ≠ 10) ✓, `a >= 5` (5 ≥ 5, gleich zählt!) ✓. Falsch sind: `a == b` (5 ≠ 10) und `b < a` (10 nicht < 5). Klassische Falle bei `>=`: gleich zählt mit.
Typ: Multi-Select
Antwort: Beide Bedingungen müssen wahr sein (UND)
Erklärung: `&&` (Java) / `and` (Python) ist der logische UND-Operator: das Gesamtergebnis ist nur dann true, wenn BEIDE Operanden true sind. Tabelle: T&&T=T, T&&F=F, F&&T=F, F&&F=F.
Antwort: Wenn der erste Operand false ist, wird der zweite nicht mehr geprüft
Erklärung: Short-Circuit (Kurzschluss-Auswertung): bei `false && X` ist das Ergebnis bereits false, also wird X gar nicht mehr geprüft, Performance-Optimierung. Bei `||` analog: wenn erster Operand true ist, wird zweiter übersprungen. Wichtig wenn der zweite Operand teure Berechnungen oder Side-Effects hat.
int counter = 0;
boolean a = false;
boolean b = true;
if (a && pruefe()) {
System.out.println("A");
} else if (b || pruefe()) {
System.out.println("B");
} else if (!a && pruefe()) {
System.out.println("C");
}
System.out.println("counter=" + counter);Antwort: B + counter=0
Erklärung: Drei Effekte zusammen: (1) `a && pruefe()`: `a` ist false → Short-Circuit, `pruefe()` wird NICHT aufgerufen, Ergebnis false. (2) `b || pruefe()`: `b` ist true → Short-Circuit, `pruefe()` wird NICHT aufgerufen, Ergebnis true → 'B' wird ausgegeben. (3) Sobald ein else-if-Branch wahr ist, werden die folgenden nicht mehr geprüft → der dritte `pruefe()`-Aufruf passiert auch nicht. → counter bleibt **0**. Beliebte Klausur-Falle: Studierende zählen Operanden statt tatsächliche Auswertungen.
new String("abc")"a" + bbscanner.next()==false==