Informatik 2

Werbung
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  11  a
ba
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
Herunterladen