FH D
Fachhochschule Düsseldorf
University of Applied Sciences
4
Informatik 2
Objektorientierte Programmierung in Java
Prof. Dr.‐ Ing. André Stuhlsatz
FH D
Blöcke
Fachhochschule Düsseldorf
University of Applied Sciences
Blöcke erweitern einzelne Anweisungen, etwa bei Kontrollstrukturen später
Beispiel:
Einzelne Anweisung:
anweisung;
Erweiterung der einzelnen Anweisung:
{
anweisung1;
anweisung2;
…
}
Blöcke können geschachtelt werden.
Wichtig:
Variablen sind nur innerhalb des Blocks und in den Verschachtelungsebenen sichtbar!
Wenn der Block geschlossen wird, ist die Variable weg!
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
2
Beispiel: Variablen in Blöcken
In diesem Beispiel
Die Variablen sind nur innerhalb des Blocks sichtbar.
Nach dem Block können die Variablen mit gleichem Namen wieder anders definiert werden.
public static void main(String[] args) {
{ int a = 15;
{
int b = 16;
System.out.println("Zahl:" + (b + a));
}
System.out.println("Zahl:" + a);
}
{ double a = 17.0;
System.out.println("Zahl:" + a);
}
System.out.println("Zahl:" + a);
}
Informatik 2
3
1
FH D
Bedingte Verzweigung
Fachhochschule Düsseldorf
University of Applied Sciences
Wenn Teile eines Programms nur unter bestimmten Bedingungen ausgeführt werden sollen, werden Verzeigungen verwendet.
Die Bedingungen können sich zur Laufzeit ändern.
In Java gibt es zwei verschiedene Anweisungen für Verzweigungen
if‐Anweisung switch‐Anweisung switch (Ausdruck) {
case Konstante1:
Anweisung1;
case Konstante2:
Anweisung2;
…
default:
StandardAnweisung;
}
if (logischer Ausdruck)
Anweisung;
if (logischer Ausdruck)
Anweisung;
else
Anweisung;
Informatik 2
FH D
4
If‐Anweisung
Fachhochschule Düsseldorf
University of Applied Sciences
Wichtig: Der logische Ausdruck hinter if muss vom Typ boolean (true/false) sein! Es ist nicht möglich dort Zahlen einzusetzen (wie in C oder MATLAB)
random() erzeugt eine gleichverteile Zufallszahl (double) zwischen 0…1 Beispiel: Münzwurf
double zufallZahl = java.lang.Math.random();
String strKopfZahl;
if (zufallZahl > 0.5)
strKopfZahl = "Kopf";
else
strKopfZahl = "Zahl";
System.out.println("Die Münze zeigt " + strKopfZahl);
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
5
If‐Anweisung: Gleichheit
Wichtig: Auf Gleichheit wird mit zwei Gleichheitszeichen getestet!
Beispiel: Würfel mit Anzeige, ob Pasch gewürfelt wurde
Achtung: Beachten Sie die Vorgehensweise bei den ganzen Zufallszahlen
int würfel_a = (int) (java.lang.Math.random()*6) + 1;
int würfel_b = (int) (java.lang.Math.random()*6) + 1;
String Meldung = "Die Würfel zeigen ";
if (würfel_a == würfel_b)
Meldung += würfel_a + "er Pasch";
else
Meldung += würfel_a + " und " + würfel_b;
System.out.println(Meldung);
Informatik 2
6
2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
If‐Anweisung: Gleichheit von Fließkommazahlen
Wichtig: Vermeiden Sie es Fließkommazahlen auf Gleichheit zu testen!
Gerade im Ingenieurbereich kann es zu schwerwiegenden Fehlern kommen!
Beispiel:
1
b a 1 a
a
b 11 a
ba
double a = 0.42;
double b = ((1/a) * a) - 1.0 + a ;
if (b == a)
System.out.println("a gleich b");
else
System.out.println("a ungleich b");
Mit Zahlen:
a=0,42 a gleich b
a=0,41 a ungleich b
Besser:
Unterschreiten von
Schwellwert.
final double EPSILON = 1e-10;
if (Math.abs(a-b)<EPSILON)
System.out.println("a gleich b");
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
7
If‐Anweisung: „Dangling else“
Verschachtelte If‐Anweisung können bei ungeeigneter Formatierung vom Menschen falsch interpretiert werden.
Das else wird immer der inneren if‐Anweisung zugeordnet!
c = 0;
if (a == 1)
if (b == 1)
c = 1;
else
c = 2;
c = 0;
if (a == 1)
if (b == 1)
c = 1;
else
c = 2;
c = 0;
if (a == 1) {
if (b == 1)
c = 1;
}
else
c = 2;
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
8
Switch‐Anweisung
Mehrfachverzeigungen können mit der switch‐Anweisung verständlicher implementiert werden, als mit geschachtelten if‐Abfragen.
Ausdruck muss vom Typ byte,
short, int oder char sein!
Die Konstante und der Ausdruck
müssen zuweisungskompatibel sein.
Konstanten dürfen nicht doppelt
vorkommen.
Das default‐Label ist optional und
wird angesprungen, wenn keine
Konstante zutrifft.
switch (Ausdruck) {
case Konstante1:
Anweisung1;
case Konstante2:
Anweisung2;
…
default:
StandardAnweisung;
}
Die Anweisungen werden alle ab der zutreffenden Konstanten ausgeführt!
Soll dies nicht geschehen, muss die Anweisung am Ende mit break beendet werden.
Informatik 2
9
3
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
Ausgabe:
Zwei
Null?
Beispiel: Switch‐Anweisung
int a = 2;
switch (a) {
case 1:
System.out.println("Eins");
case 2:
System.out.println("Zwei");
default:
System.out.println("Null?");
}
int a = 2;
switch (a) {
case 1:
System.out.println("Eins");
break;
case 2:
System.out.println("Zwei");
break;
default:
System.out.println("Null?");
break;
}
Ausgabe:
Zwei
10
Informatik 2
FH D
Schleifen
Fachhochschule Düsseldorf
University of Applied Sciences
while‐Schleife:
Die Schleife wird durchlaufen, solang der logische Ausdruck wahr ist.
Wenn der logische Ausdruck zu Anfang schon falsch ist, wird die Anweisung gar nicht ausgeführt!
while (logischer Ausdruck)
Anweisung;
do‐Schleife:
Die Schleife wird beendet, wenn der logische Ausdruck falsch ist.
Die Anweisung wird mindestens einmal durchlaufen, weil der logische Ausdruck erst am Ende geprüft wird!
do
Anweisung;
while (logischer Ausdruck)
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
11
for‐Schleifen
for (init; test; update)
Anweisung;
Der Kopf der for‐Schleife besteht aus drei Ausdrücken, die jeder für sich optional sind:
Der init‐Ausdruck wird einmal vor dem Start der Schleife aufgerufen. Er dient dazu, Initialisierungen durchzuführen.
Der init‐Teil darf auch aus mehreren Ausdrücken bestehen, wenn die einzelnen Teilausdrücke durch Kommata getrennt sind.
Fehlt der Initialisierungsteil, wird keine Initialisierung im Kopf der Schleife durchgeführt.
Der init‐Teil darf auch Variablendeklarationen enthalten, beispielsweise, um einen Schleifenzähler zu erzeugen. Der test‐Teil bildet den Testausdruck der Schleife. Analog zur while‐Schleife wird er am Anfang der Schleife ausgeführt.
Der update‐Ausdruck dient dazu, den Schleifenzähler zu verändern. Informatik 2
12
4
FH D
Beispiel: for‐Schleifen
Fachhochschule Düsseldorf
University of Applied Sciences
for (int i=1; i<=3; i++) {
System.out.println("i ist " + i);
}
int i = 1;
for (; i<=3; i++) {
System.out.println("i ist " + i);
}
int i = 1;
for (; i<=3;) {
System.out.println("i ist " + i++);
}
13
Informatik 2
FH D
Übung Fachhochschule Düsseldorf
University of Applied Sciences
Schreiben Sie eine berechneGLS_Versandkosten()‐Methode für die Klasse GLS_Paket, welche die Versandkosten in Euro zurückgibt. Auf der Internetseite von GLS findet sich folgende Anleitung für die Berechnung der Versandkosten.
„Die Größe Ihres Pakets (längste Seite + kürzeste Seite) wird in Ihrem Paketshop mit einem Maßband vermessen. Je nach Größe ergeben sich nur noch fünf verschiedene Preisklassen – XS bis XL – unabhängig vom Gewicht.“
„Das Gurtmaß (Umfang des Paketes zzgl. längste Seite) darf 3 m nicht überschreiten.“
Pack‐Größe Längste + kürzeste Seite Versandkosten
Wenn das maximale
XS
max. 35 cm
4,10 €
Gurtmaß überschritten
S
max. 50 cm
5,90 €
wird, soll die
M
max. 65 cm
6,90 €
Methode ‐1.0
zurückgeben.
L
max. 80 cm
9,90 €
XL
max. Gurtmaß
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
15,30 €
14
Vorbereitung
Gegeben ist:
a = kürzeste Seite
b = zweitkürzeste Seite
c = längste Seite
c
Wichtige Berechnungen:
a+c
= längste + kürzeste Seite
a 2*(a+b)+c = Gurtmaß
b
Rückgabetyp: float oder double, weil die Versandkosten Nachkommastellen haben.
Also: public float berechneGLS_Versandkosten()
Informatik 2
15
5
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
Verzweigung wie in Tabelle
1. if (a+c <= 35)
2.
return 4.1f;
3. if (a+c <= 50)
4.
return 5.9f;
5. if (a+c <= 65)
6.
return 6.9f;
7. if (a+c <= 80)
8.
return 9.9f;
Pack‐
Längste + kürzeste Versand‐
Größe
Seite
kosten
XS
max. 35 cm
4,10 €
S
max. 50 cm
5,90 €
M
max. 65 cm
6,90 €
L
max. 80 cm
9,90 €
XL
max. Gurtmaß
15,30 €
9. if ((2*(a+b)+c) <= 300)
10.
return 15.3f;
11. return -1f; // unzulässige Paketgröße
Informatik 2
16
6