Sie sind auf Seite 1von 24

5 Bedingungen und Vergleiche

5.1 Blcke 5.2 if-Anweisung


Logische Operatoren UND, ODER, NEGATION

5.3 switch-Anweisung 5.4 Objekte vergleichen

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.1 Blcke
Ein Block ist eine Zusammenfassung von 1 bis n Anweisungen Er wird mit geschweiften Klammern umschlossen:
{

int a=0; System.out.println(text); a + b;


}

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.1 Blcke
Blcke sind die Basis fr Steuerstrukturen wie Schleifen und if-Anweisungen Ziel von Bedingungen und Vergleichen ist es, Blcke nur unter gewissen Bedingungen auszufhren Variablen, die innerhalb des Blocks deklariert werden sind auch nur innerhalb des Blocks verwendbar Innerhalb eines Blocks werden die Anweisungen eingerckt (Wie bei Klassen und Methoden auch)
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 if-Anweisung
Mit einer if-Anweisung kann gesteuert werden, ob ein Block ausgefhrt werden soll Dabei wird oberhalb des Blocks durch eine Prfung ein Wahrheitswert (true/false) zur Entscheidung herangezogen. Allgemeine Struktur:
if( true ){ [Anweisungen] }
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 if-Anweisung
Beispiel: if(15 > 10){ System.out.println(text); } else{ if( (5+5) == 10){ einMethodenaufruf(); } }
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 if-Anweisung
Innerhalb der Klammer mit der Prfbedingung kann ein
Komplexer Ausdruck Literal* Variable* Methodenaufruf ** stehen.
*Es muss sich um einen boolean handeln

**Die Methode muss einen boolean als Wert zurckliefern


25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 Vergleichsoperatoren
Folgende Vergleichsoperatoren stehen zur Verfgung:
if( a == b ) if( a < b ) if( a > b ) if( a <= b ) if( a >= b ) if( a != b ) Gleichheit Kleiner als Grer als Kleiner oder gleich Grer oder gleich Ungleichheit

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 Der else-Zweig


Nach dem if-Block kann ein else-Block angegeben werden, der durchlaufen wird, wenn die ifBedingung false war
if (false){ //Dieser Code wird nicht erreicht } else{ //Hier springt die Anwendung rein }
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 Logischer UND-Operator


Wenn mehr als eine Bedingung geprft werden soll mssen logische Operatoren zur Verknpfung der Ausdrcke verwendet werden
Der Anweisungsblock soll ausgefhrt werden, wenn die zu prfende Zahl grer als fnf und kleiner als zehn ist
if( (a > 5) && (a < 10) ){ }

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

5.2 Logischer UND-Operator


Damit der Gesamtausdruck true wird, mssen beide Teilausdrcke jeweils true ergeben. Wahrheitstabelle fr if( a && b )
a
true true false false
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

b
true false true false

a && b
true false false false
10

5.2 Logischer ODER-Operator


Neben dem UND-Operator gibt es noch den ODER-Operator. Der Gesamtausdruck wird true wenn einer der beiden Ausdrcke (oder beide) true sind:
if( (a < 5) || (a > 10) ){ }

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

11

5.2 Logischer ODER-Operator


Damit der Gesamtausdruck true wird, muss mindestens ein Teilausdruck true ergeben. Wahrheitstabelle fr if( a || b )
a
true true false false
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

b
true false true false

a || b
true true true false
12

5.2 Logische Negation


Bei der logischen Negation wird der Wahrheitswert umgekehrt. Es gilt das Motto Zweimal negiert ist einmal bejaht
if( !false ){ }

Wenn die Bedingung eigentlich false war wird sie durch die Negation umgekehrt und der if-Block ausgefhrt
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

13

5.3 switch-Anweisung
Die switch-Anweisung eignet sich fr Flle, in denen mehr als zwei Handlungsalternativen auftreten knnen.
Switch(Ausdruck){ case <Literal>: [Anweisung] break; }

Beispiel: In einer Variable stehen die Zahlen 1-4, welche die vier Jahreszeiten darstellen sollen. Je nachdem, welche Zahl in der Variablen steht, soll der Name der Jahreszeit ausgegeben werden.
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

14

5.3 switch-Anweisung
int jahreszeit = 3;

switch(jahreszeit){ case 1: System.out.println(Frhling); break; case 2: System.out.println(Sommer); break; case 3: System.out.println(Herbst); break; case 4: System.out.println(Winter); break; default: System.out.println(unbekannt); }
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

15

5.3 switch-Anweisung
Nach dem Schlsselwort switch knnen die Datentypen byte, short, int oder char zur Fallunterscheidung verwendet werden. Seit Java 7 ist auch eine Unterscheidung mit dem Datentyp String mglich Nach jedem Zweig muss mit break; ein Abbruch des switch-Blockes herbeigefhrt werden Die Verwendung eines default-Blockes ist fr den Fehlerfall sinnvoll
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

16

5.4 Objekte vergleichen


Fr den Vergleich von primitiven Datentypen wurden bereits einige Operatoren vorgestellt
Diese Vergleiche waren verhltnismig einfach, da in dem Datentyp auer dem gesetzten Wert keine Informationen enthalten sind

Komplexe Datentypen, wie z.B. Strings oder selbstgeschriebene Klassen lassen sich nicht auf diese Weise miteinander vergleichen

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

17

5.4 Objekte vergleichen


Hintergrund: Objektorientierung bedeutet, dass alles, was vorstellbar ist, in Objekten dargestellt wird. Huser, Menschen, Autos, Zeichenketten, Kalendereintrge
Die primitiven Datentypen bilden in diesem Dogma eine Ausnahme!

Im Sinne der Objektorientierung wird es nun in den Verantwortungsbereich des Objektes gelegt, wie es mit anderen Instanzen seinesgleichen verglichen werden soll
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

18

5.4 Objekte vergleichen


Der Vergleich (Objekt a == Objekt b) wird daher nicht funktionieren, denn er untersucht nur, ob es sich bei den beiden Variablen um Zeiger auf die gleiche Speicheradresse handelt. Aber auch zwei verschiedene Objekte, die an unterschiedlichen Stellen im Speicher liegen knnen im Sinne der Objektorientierung identisch sein.

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

19

5.4 Objekte vergleichen


Beispiel:
Sie haben eine Klasse Lampe geschrieben. Die Klasse hat ein Attribut Farbe Sie erzeugen nun zwei Variablen vom Typ Lampe Bei beiden Lampen belegen sie das (lampeninterne) Attribut Farbe mit wei. Im Sinne Ihres Verstndnisses handelt es sich damit um zwei gleiche Objekte Der Test (Lampe a == Lampe b) wird trotzdem negativ (false) sein! Warum?
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

20

5.4 Objekte vergleichen


Beispiel:
Sie haben zweimal eine Lampe als Variable instanziiert. Damit haben Sie der JVM gesagt, dass Sie zwei Objekte vom Typ Lampe wnschen. Diese Objekte liegen nun an unterschiedlichen Stellen im Speicher (Heap), damit beide jeweils fr sich existieren knnen. Der obige Vergleich muss daher fehlschlagen, da er nur prft, ob die beiden Variablen auf dasselbe Objekt im Speicher zeigen. Die Variable enthlt eine Referenz auf die Stelle im Speicher, an der das Objekt, z.B. der String abgelegt ist
25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

21

5.4 Objekte vergleichen


Aber wie vergleichen Sie nun die Objekte?
Jede Klasse besitzt eine Methode, diesen Vergleich bernehmen kann: equals() Sie knnen in dem Objekt Lampe, dass von einer der Variablen referenziert wird, die Methode equals aufrufen und das zweite, auf Gleichheit zu prfende Objekt bergeben.

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

22

5.4 Objekte vergleichen


Beispiel:
Lampe a = new Lampe(); Lampe b = new Lampe(); if(a.equals(b)){ System.out.println(Lampen sind identisch); }

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

23

5.4 Objekte vergleichen


bung:
Implementieren Sie fr die Kontoklasse die Methode equals(). Sie soll true zurckliefern, wenn Kontoinhaber und Betrag identisch sind. Testen Sie Ihre neue Methode indem Sie zwei Objekte vom Typ Konto anlegen und miteinander vergleichen

25.11.2011 Objektorientierte Programmierung Wirt.-Inf. Bsc. Martin Mller

24