Bedingte Ausführung
aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de
| Kurzinfo | ||
|---|---|---|
| ||
|
Inhaltsverzeichnis |
if-Abfrage
|
Eine bedingte Anweisung ist in der Programmierung eine Anweisung, die nur unter einer bestimmten Bedingung ausgeführt wird. Sie ist einer der wichtigsten Bestandteile der Programmierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. wenn (Bedingung) dann Anweisung(en) Dies ist folgendermaßen zu lesen: wenn Bedingung eintritt, dann wird zu Anweisung(en) nur verzweigt.
|
In Java
if (Bedingung) { // Anweisungsblock ... }
- Beispiel
public void pruefeZahl(int pZahl) { if (pZahl>0) { System.out.println(pZahl+" ist positiv."); } }
Als Arithmetische Notation
Eine if Notation ohne else ist nicht möglich, die Syntax bietet dies nicht. Dennoch gibt es die Möglichkeit if ohne else in Arithmetische Notation abzubilden. Sie Siehe Arithmetische Notation if ohne else .
if-else-Abfrage
if (Bedingung) { // Anweisungsblock ... } else { // Anweisungsblock ... }
- Beispiel
public void pruefeZahl(int pZahl) { if (pZahl>0) { System.out.println(pZahl+" ist positiv."); } else { System.out.println(pZahl+" ist negativ oder 0."); } }
Arithmetische Notation if / else
Schema: Bedingung ? Zutreffend : nicht Zutreffend; Syntax mit Zuweisung: ergebissEmpfänger = Bedingung ? Zutreffend : nicht Zutreffend;
Erleuterung: 'ergebissEmpfänger' bekommt die Auswertung der Bedingung durch das = zugewiesen. Nach dem ? wird der Wert Notiert, für den Fall, das die Auswertung der Bedingung 'true' zurück gibt. Nach dem : wird der Wert des 'false' Fall notiert. Wert kann Anweisung/Ausdruck sein, die Rückgabe muss dem Daten Type des ergebissEmpfänger entsprechen. Bedingung kann eine Anweisung/Ausdruck sein, sie muss den Daten Type boolean|Boolean zurückgeben. Praxistip: Da die Syntax eine if Anweisung ohne else nicht zu lässt, es aber in manchen Fällen eine Arithmetische Notation zwingend ist, kann das Hinderniss durch Notation des ergebissEmpfänger hinter dem ? und dem : umgangen werden. Die if/else Verzweigung verhält sich dann so, wie ein if ohne else.
- Beispiel Arithmetische Notation if/else
public void pruefeZahl(int pZahl) { System.out.println( pZahl > 0 ? pZahl+" ist positiv." : pZahl+" ist negativ oder 0." ); }
- Beispiel Arithmetische Notation if 'ohne' else
Um die Arithmetische Notation zu Komplettieren und zu zeigen wie es gemacht werden kann. Hier noch ein Beispiel.
public void pruefeZahlArithmetisch( int pZahl ) { // Ziel ist eine Ausgabe pZahl+2 wenn pZahl grösser 5 ist, ansonsten soll pZahl unverändert beleiben. // Es ist handelt sich immer noch eine if/else, da aber pZahl pZahl zugwiesen wird ist // das Verhalten wie in einer if Bedingung ohne else. // im Fall das pZahl grösser 5 kommt es zur addition // pZahl = pZahl + 2. // Im anderen Fall // ist und bleibt der Wert von pZahl gleich. pZahl = pZahl > 5 ? pZahl + 2 : pZahl; System.out.println( "Wert von pZahl:" + pZahl ); } //Zur gegenüberstellung public void pruefeZahlMitIfElse( int pZahl ) { if(pZahl > 5) { pZahl = pZahl + 2; }else{ pZahl = pZahl; } System.out.println( "Wert von pZahl:" + pZahl ); }
Anwendung if/else und Arithmetische Notation
Die if/else Notation empfiehlt sich wenn der Anweisungsblock komplexer ist, da bei Verschachtelungen in Arithmetische Notation schnell unübersichtlichen Kode entsteht.
Anmerkung: Soll in Java Server Faces eine if/else Bedingung abgebildet werden ist man zur Arithmetische Notation gezwungen, if/else ist im View nicht zugelassen.
Verschachtelte if-Abfrage
Bei dem Beispiel handelt es sich um eine verschachtelte Verzweigung. In einem if...else wird ein weiteres if...else untergebracht.
if (Bedingung) { // Anweisungsblock ... } else { if (Bedingung) { // Anweisungsblock } else { // Anweisungsblock ... } }
- Beispiel
public void pruefeZahl(int pZahl) { if (pZahl>=10) { System.out.println(pZahl+" ist zwei oder mehrstellig"); } else { if (pZahl<0) { System.out.println(pZahl+"ist negativ."); } else { System.out.println(pZahl+" liegt zwischen 0 und 9.999..."); } } }
Verschachtelte if-Abfrag in Arithmetische Notation
- Beispiel
public void pruefeZahl(int pZahl) { System.out.println( pZahl>=10 ? pZahl+" ist zwei oder mehrstellig" : pZahl<0 ? pZahl+"ist negativ." : pZahl+" liegt zwischen 0 und 9.999..." ); }
Der Ablauf in Worten: Übergeben ist pZahl mit dem Wert 5: Java wertet von Links nach Rechts aus, dabei werden Klammern beachtet. System.out.println( ) Der Inhalt der Klammer muss ausgewertet werden. Als erstes stossen wir auf die Frage. pZahl>=10? Ist pZahl grösser gleich zehn? Die Antwort ist: Nein. Ergo muss alles nach dem ersten Fragezeichen bis zum nächsten Doppelpunkt überspungen werden. Wenn die Antwort Ja wäre müsste der Zutreffend Block nach dem ersten Fragezeichen ausgewertet werden, pZahl+" ist zwei oder mehrstellig" und mit System.out.println( ) ausgegeben werden - fertig. Aber die Auswertung hat Nein ergeben also 'Nicht zutreffend' muss ausgewertet werden. Nicht zutreffend beginnt nach dem ersten Doppelpunkt. Hier stossen wir auf die Frage pZahl<0? Ist pZahl kleiner als Null? Die Antwort lautet Nein, pZahl ist nicht kleiner als 0. Ergo wird der zweite Zutreffend Block pZahl+"ist negativ." nach dem zweiten Fragezeichen übersprungen und die Auswertung startet nach dem zweiten Doppelpunkt. Hier stossen wir auf: pZahl+" liegt zwischen 0 und 9.999..." Das wird auf Grund des Plus Zeichens zu einer Zeichenkette zusammengefasst. Damit ist die Klammer ausgewertet. Das Program macht via System.out.println() die Ausgabe "5 liegt zwischen 0 und 9.999..." - fertig.
Übliche Operatoren für die Bedingung
- Numerische Werte als Bedingung
Bei numerischen Werten verwendet man folgende Operatoren.
< (kleiner)
> (größer)
<= (kleiner gleich)
>= (größer gleich)
== (gleich mit zwei == Zeichen)
!= (ungleich)
- Wahrheitswerte (boolean)
- Variablen vom Typ boolean können mit if abgefragt werden. Dabei kann z.B. ein !, also ein logisches NICHT verwendet werden. Das folgende Beispiel verdeutlicht die Abfrage eines Wahrheitswertes.
public void testeBoolean(boolean wahrheitswert) { if (!wahrheitswert) { System.out.println("Der Wahrheitswert hatte den Wert false"); } else { System.out.println("Der Wahrheitswert hatte den Wert true"); } }
Die Alternative wäre:
public void testeBoolean(boolean wahrheitswert) { System.out.println( ! wahrheitswert ? "Der Wahrheitswert hatte den Wert false" : "Der Wahrheitswert hatte den Wert true" ); }
Hinweis
- Jede Bedingung ist letztlich ein boolscher-Wert, d.h. sie muss eindeutig mit true oder false beantwortet werden können.
- der else-Teil kann auch weggelassen werden, bei Arithmetische Notation nicht.
- die if-Anweisung ist keine Schleife (was Anfänger immer wieder falsch sagen!) sondern eine Verzweigung
|
isPositiv() - Beispiel Onlinebank
Die folgende Methode prüft, ob der Kontostand positiv ist1. Typisch ist hierbei, dass Prüfmethoden wie diese mit dem Wort „is“, also dem englischen ist, anfangen. Der Rückgabewert der Methode ist vom Typen boolean, d.h. er wird entweder true oder false zurückgegeben. Neu ist die Speicherungen von Daten in einer „lokalen Variable“ ergebnis. Diese ist eine lokale Variable, da sie nur innerhalb der Methode isPositiv() gültig ist.
public boolean isPositiv() { boolean ergebnis; if (kontostand>0) { ergebnis=true; } else { ergebnis=false; } return ergebnis; }
Möglich wäre auch:
public boolean isPositiv() { boolean ergebnis = kontostand>0 ? true : false; return ergebnis; }
|
(Zum Onlinebankprojekt)
|
Seite bookmarken