• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung"

Copied!
76
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

252-0027

Einführung in die Programmierung

2.3.2 Verschachtelte Schleifen 2.4 Methoden mit Parametern 2.5 “if”-Anweisungen

Thomas R. Gross

Department Informatik ETH Zürich

(2)

Uebersicht

§ 2.2 Typen und Variable

§ Deklaration von Variablen

§ 2.3 Schleifen (Loops)

§ 2.3.1 “for” Loops

§ 2.3.2 Verschachtelte Schleifen

§ 2.4 Methoden mit Parametern

§ 2.5 “if”-Anweisungen

§ 2.6 Nochmals Schleifen

§ “while” Loops

§ 2.X Input

3

(3)

2.3.2 Verschachtelte for Schleifen

(4)

for Schleife

for (initialization; test; update) { statement;

statement;

...

statement;

}

statement (Anweisung im Rumpf der Schleife) kann beliebige Java Anweisung sein

Auch wieder eine Schleife ….

body (Rumpf) header (Kopf)

(5)

Verschachtelte Schleifen

§ Verschachtelte Schleifen ("nested loop"): Schleife in einer Schleife

for (int i = 1; i <= 5; i++) {

for (int j = 1; j <= 10; j++) { System.out.print("*");

}

System.out.println(); // to end the line }

Output:

**********

**********

**********

**********

**********

§ Der Rumpf der äusseren Schleife wird 5-mal

ausgeführt, der Rumpf der inneren (Schleife)

10-mal (jedesmal)

(6)

Verschachtelte Schleifen

Was gibt dieses Programmsegment aus?

for (int i = 1; i <= 5; i++) {

for (int j = 1; j <= i; j++) { System.out.print("*");

}

System.out.println();

}

§ Output:

*

**

***

*********

(7)

Verschachtelte Schleifen

Was gibt dieses Programmsegment aus?

for (int i = 1; i <= 5; i++) {

for (int j = 1; j <= i; j++) { System.out.print(i);

}

System.out.println();

}

§ Output:

1 22 333 444455555

(8)

Mögliche Fehler

§ Die Schleife terminiert nicht

§ Läuft und läuft und läuft

§ Endlosschleife ("infinite loop")

(9)

Mögliche Fehler

§ Die Schleife terminiert nicht

§ Läuft und läuft und läuft

§ Endlosschleife ("infinite loop")

§ Beispiele:

for (int i = 1; i <= 5; i++) {

for (int j = 1; i <= 10; j++) { System.out.print("*");

}System.out.println();

}

(10)

Mögliche Fehler

§ Die Schleife terminiert nicht

§ Läuft und läuft und läuft

§ Endlosschleife ("infinite loop")

§ Beispiele:

for (int i = 1; i <= 5; i++) {

for (int j = 1; j <= 10; i++) { System.out.print("*");

}System.out.println();

}

(11)

Was tun?

§ Eclipse kann solche Programme stoppen.

§ Klicken auf "Terminate"

17

(12)

Mehr Beispiele

§ Welche verschachtelten for Schleifen erzeugen diesen Output?

....1 ...2 ..3 .4 5

(13)

Mehr Beispiele

§ Welche verschachtelten for Schleifen erzeugen diesen Output?

....1 ...2 ..3 .4 5

§ Wir müssen eine Ausgabezeile konstruieren:

§ mit einer äusseren Schleife für jede Zeile

§ mit innerer(n) Schleife(n) für das Muster jeder Zeile

äussere Schleife (5-mal da es 5 Zeilen gibt) innere Schleife (für jede Zeile)

(14)

Äussere und innere Schleife

§ Legen Sie erst die äussere Schleife fest, zählt von 1 bis zur Anzahl der Zeilen

for (int line = 1; line <= 5; line++) { ...

}

§ Analysieren Sie jede Zeile. Entdecken Sie das Muster:

§ ein paar Punkte (0 Punkte in der letzten Zeile) gefolgt von Zahl

....1 ...2 ..3 .4

5 Beobachtung: Die Anzahl der

Punkte hängt von der Zeilennummer ab.

(15)

Zahlenfolgen à Schleifen

for (int count = 1; count <= 5; count++) { System.out.print( ... );

}

Welche Anweisung im Rumpf würde diesen Output ergeben:

4 7 10 13 16

for (int count = 1; count <= 5; count++) { System.out.print(3 * count + 1 + " ");

}

(16)

Zahlenfolgen à Schleifen mit Tabellen

§ Welche Anweisung im Rumpf würde diesen Output ergeben:

2 7 12 17 22

§ Zum Finden des Musters erstellen Sie eine Tabelle mit count und den Zahlen.

§ Wenn sich count um 1 erhöht, sollte die Zahl um 5 heraufgehen.

§ Aber count * 5 ist zu gross (um 3), also subtrahieren wir 3.

count Zahl in Folge

1 2

2 7

3 12

4 17

5 22

5 * count - 3

2 7 12 17 22

count Zahl in Folge 5 * count

1 2 5

2 7 10

3 12 15

4 17 20

5 22 25

(17)

Weiteres Tabellen Beispiel

§ Welche Anweisung im Rumpf würde diesen Output ergeben:

17 13 9 5 1

§ Konstruieren wir die Tabelle.

§ Wenn sich count um 1 erhöht, sollte die Zahl ...

§ Aber dieses Produkt ist zu ...

count Zahl in Folge

1 17

2 13

3 9

4 5

5 1

-4 * count -4 * count + 21

-4 17

-8 13

-12 9

-16 5

-20 1

-4 * count -4

-8 -12 -16 -20

(18)

Zurück zum Beispiel mit for Schleife

§ Konstruieren wir eine Tabelle

....1 ...2 ..3 .4 5

§ Um einen Buchstaben mehrfach zu drucken verwenden wir eine for Schleife.

for (int j = 1; j <= 4; j++) {

System.out.print("."); // 4 Punkte }

line # Punkte

1 4

2 3

3 2

4 1

5 0

-1 * line -1

-2 -3 -4 -5

-1 * line + 5

4 3 2 1 0

(19)

Lösung mit for Schleife

§ Antwort:

for (int line = 1; line <= 5; line++) {

for (int j = 1; j <= (-1 * line + 5); j++) { System.out.print(".");

}

System.out.println(line);

}

§ Output:

....1

...2

..3

.4

5

(20)

Verschachtelte for Schleifen

§ Was ist der Output dieser verschachtelten Schleifen?

for (int line = 1; line <= 5; line++) {

for (int j = 1; j <= (-1 * line + 5); j++) { System.out.print(".");

}

for (int k = 1; k <= line; k++) { System.out.print(line);

}

System.out.println();

}

§ Answer:

....1 ...22 ..333 .4444 55555

(21)

Verschachtelte for Schleifen Uebung

§ Verändern Sie das letzte Programm so dass dieser Output erzeugt wird:

....1 ...2.

..3..

.4...

5....

(22)

Verschachtelte for Schleifen Uebung

Verändern Sie das letzte Programm so dass dieser Output erzeugt wird:

....1 ...2.

..3..

.4...

5....

(Eine) Antwort:

for (int line = 1; line <= 5; line++) {

for (int j = 1; j <= (-1 * line + 5); j++) { System.out.print(".");

}

System.out.print(line);

for (int j = 1; j <= (line - 1); j++) { System.out.print(".");

}

System.out.println();

}

(23)

2.4 Methoden mit Parametern

31

(24)

Zurück zu unserem einfachen Beispiel

§ Wir sich nicht an die Regeln hält muss sie abschreiben:

class Beispiel {

public static void main (String[] args) { for (int i = 1; i <= 5; i++) {

System.out.println(

"Ich werde die Schulhausregeln beachten");

}

} // end main }

32

(25)

Mit Methode

§ Wir sich nicht an die Regeln hält muss sie abschreiben:

class Beispiel {

public static void main (String[] args) { strafe();

} // end main

public static void strafe() {

} // end strafe

} 33

(26)

Mit Methode

public static void strafe () {

for (int i = 1; i <= 5; i++) { System.out.println(

"Ich werde die Schulhausregeln beachten");

}

} // end strafe

34

(27)

Mit Methoden strafe5, strafe10, strafe15

public static void strafe5 () {

for (int i = 1; i <= 5; i++) { ... } } // end strafe5

public static void strafe10 () {

for (int i = 1; i <= 10; i++) { ... } } // end strafe10

public static void strafe15 () {

for (int i = 1; i <= 15; i++) { ... } } // end strafe15

35

(28)

Noch mehr Strafen …

§ Diese "Lösung" lässt nur eine vorgebene Anzahl von Wiederholungen zu …

§ Was wenn wir auch andere Anzahl Wiederholungen wollen?

§ OK, kein echtes Thema aber es geht uns ja um das Prinzip

§ Wir brauchen einen Weg, die Anzahl der Wiederholungen der Situation anzupassen

§ Parametrisierung: mit (veränderbaren) Parametern versehen

36

(29)

Parametrisierung

§ Parameter: Ein Wert den eine aufgerufene Methode von der aufrufenden Methode erhält.

§ Statt strafe5, strafe10, strafe15 entwicklen wir eine Methode flexstrafe so dass verschiedene Wiederholungen gewählt werden können.

§ Wenn wir eine Methode deklarieren dann geben wir an, dass diese Methode einen Parameter braucht.

§ Wenn wir die Method aufrufen, dann geben wir einen Wert für den Parameter an.

(30)

Parametrisierung

main 5 flexstrafe flexstrafe 10

Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten

Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten Ich werde die Schulhausregeln beachten

(31)

Parameterdeklarationen

Gibt an dass eine Methode einen Parameter braucht um ausgeführt werden zu können

public static void name ( type name ) { statement;

}

§ Beispiel:

public static void echoPin(int code) {

System.out.println(”Die Geheimnummer ist: " + code);

}

(32)

Parameterdeklarationen

Gibt an dass eine Methode einen Parameter braucht um ausgeführt werden zu können

public static void name ( type name ) { statement;

}

§ Beispiel:

public static void echoPin(int code) {

System.out.println(”Die Geheimnummer ist: " + code);

}

name: Parameter Variable

(33)

Parameterdeklarationen

Gibt an dass eine Methode einen Parameter braucht um ausgeführt werden zu können

public static void name ( type name ) { statement;

}

§ Beispiel:

public static void echoPin(int code) {

System.out.println(”Die Geheimnummer ist: " + code);

}

§ Wenn echoPin aufgerufen wird dann muss der Aufrufer einen int Wert angeben.

(34)

Wert(e) für Parameter

Beim Aufruf einer Methode muss ein Wert für den Parameter angegeben werden.

name (expression);

§ Beispiel:

public static void main(String[] args) { echoPin(42);

echoPin(12345);

}

§ Output

Die Geheimnummer ist: 42 Die Geheimnummer ist: 12345

(35)

Wie werden Parameter übergeben?

§ Uebergeben: vom Aufrufer zur aufgerufenen Methode

§ Wenn eine Methode aufgerufen wird dann:

§ Der Wert wird in der Parameter Variable gespeichert

§ Die Anweisungen der Methode werden ausgeführt (mit diesem Wert für die Parameter Variable).

§ Der Wert, den der Aufrufer übergibt, kann durch eine Variable gegeben sein

§ Der Wert kann durch einen Ausdruck berechnet werden

§ Eine Konstante (Literal) ist auch ein Ausdruck

(36)

Methode mit Parameter

§ Zurück zum Beispiel:

class Beispiel {

public static void main (String[] args) { flexstrafe(1000);

} // end main

public static void flexstrafe(int wieoft) { for (int i = 1; i <= wieoft; i++) {

System.out.println("Ich werde die Schulhausregeln beachten");

}

} // end flexstrafe

} 46

(37)

Parameter

§ Ein Parameter in der Deklaration einer Methode heisst formaler Parameter (“formal parameter”)

§ Formal parameter: definiert Variable (legt Typ und Namen fest!)

§ Der übergebene Wert heisst tatsächlicher Parameter (“actual parameter”) oder Argument (“argument”)

§ Aktuell: augenblicklich, derzeitig [Duden]

§ Aktueller Wert

(38)

Parameter

Ein Parameter kann in der Methode wie jede Variable verwendet werden

(z.B. Anzahl der Iterationen einer Schleife kontrollieren)

public static void main(String[] args) { printPunkt(3);

}

public static void printPunkt(int times) { for (int i = 1; i <= times; i++) {

System.out.println(“.");

}

}

Output: …

(39)

Wie werden Parameter übergeben?

public static void main(String[] args) { printPunkt(3);

printPunkt(7);

}

public static void printPunkt(int times) { for (int i = 1; i <= times; i++) {

System.out.println(“.");

} }

37

(40)

Mögliche Fehler

§ Wenn eine Methode einen Parameter erwartet dann muss dieser auch übergeben werden.

printPunkte(); // ERROR: parameter value required

§ Der Wert muss den richtigen Typ hben

printPunkte(3.7); // ERROR: must be of type int Die Regeln für Umwandlungen gelten auch hier

(41)

Mehrere Parameter

§ Eine Methode kann mehrere Parameter erwarten (getrennt durch , in Deklaration und im Aufruf)

§ Wenn die Methode aufgerufen wird muss ein Wert für jeden Parameter angegeben werden

§ Deklaration:

public static void name (type name, ..., type name) { statement;

}

§ Aufruf: name (value, value, ..., value);

(42)

Beispiel mit mehreren Parametern

public static void main (String[] args) { Scanner console = new Scanner(System.in);

System.out.print("Input lower bound: ");

int low = console.nextInt();

System.out.print("Input upper bound: ");

int up = console.nextInt();

printOdd(low, up);

printOdd(-up, -low);

}

public static void printOdd(int from, int to) { for (int i=from; i<=to; i++) {

if (i%2==1) { System.out.println(i);

} } }

(43)

Wie werden Parameter übergeben?

§ Wenn eine Methode aufgerufen wird:

§ Der übergebene Wert wird in der Parameter Variable gespeichert

§ Die Anweisungen der Methode werden ausgeführt (mit diesem Wert für die Parameter Variable).

§ Der Wert, den der Aufrufer übergibt, kann durch einen Ausdruck (Expression) gegeben sein

§ Der Wert des Expressions wird berechnet

§ Die aufgerufene Methode erhält den Wert und hat keine

Kenntnis wie der Wert berechnet wurde

(44)

Uebergabe von Werten (“Value semantics”)

public static void main(String[] args) { printPunkt(3);

printPunkt(3+4);

}

public static void printPunkt(int times) { for (int i = 1; i <= times; i++) {

System.out.println(“.");

} }

37

(45)

Wie werden Parameter übergeben?

§ Wenn eine Methode aufgerufen wird:

§ Der übergebene Wert wird in der Parameter Variable gespeichert

§ Die Anweisungen der Methode werden ausgeführt (mit diesem Wert für die Parameter Variable).

§ Der Wert, den der Aufrufer übergibt, kann durch eine Variable gegeben sein

§ Der Wert der Variable wird verwendet

§ Die aufgerufene Methode erhält den Wert und hat keine Kenntnis wie der Wert berechnet wurde

§ Insbesondere kennt die aufgerufene Methode nicht die Variablen des Aufrufers

(46)

Uebergabe von Werten (“Value semantics”)

§ Gegeben ein Parameter P eines Basistyps (int, double,…)

§ Wenn das Argument durch eine Variable V bestimmt wird dann wird der Wert dieser Variable kopiert, d.h. P wird auf den Wert von V gesetzt

§ Wir sprechen von “value semantics”

§ Veränderungen der Parameter Variable P in der aufgerufenen Methode haben keine Auswirkung auf V.

(47)

Uebergabe von Werten (“Value semantics”)

public static void strange(int x) { x = x + 1;

System.out.println("1. x = " + x);

}

public static void main(String[] args) { int x = 23;

strange(x);

System.out.println("2. x = " + x);

...

}

Output:

1. x = 24 2. x = 23

(48)

60

(49)

Uebergabe von Werten (“Value semantics”)

§ value semantics bedeutet dass (nur) der Wert übergeben wird

§ Veränderungen der Parameter Variable in der aufgerufenen Methode haben keine Auswirkung auf V.

§ Name eines aktuellen Parameters (wenn eine Variable verwendet wird) ist unwichtig.

(50)

63

(51)

Uebersicht

§ 2.5 "if" Anweisungen

§ 2.6 Nochmal Schleifen

64

(52)

if Anweisung (" if -statement")

§ Führt eine Anweisung (oder Anweisungen) nur aus wenn ein Test den Wert wahr ("true") ergibt.

if (test) { statement;

...

statement;

}

§ Beispiel:

double punkte = console.nextDouble();

if (punkte >= 50.0) {

System.out.println("Pruefung bestanden.");

}

Anweisung(en) ausführen Ist test wahr?

Folgende Anweisung ausführen

ja nein

(53)

if-else Anweisung

§ Führt einen Gruppe von Anweisungen aus wenn ein Test den Wert wahr ("true") ergibt, sonst eine andere Gruppe

if (test) {

statement(s);

} else {

statement(s);

}

§ Beispiel:

double punkte = console.nextDouble();

if (punkte >= 50.0) {

System.out.println("Pruefung bestanden.");

} else {

System.out.println("Pruefung nicht bestanden.");

}

"if" Anweisung(en) ausführen

Ist test wahr?

Folgende Anweisung ausführen

nein ja

"else" Anweisung(en) ausführen

(54)

Boolesche Ausdrücke

§ if Anweisungen und for Schleifen verwenden beide boolesche Ausdrücke.

for (int i = 1; i <= 10; i++) { ...

if (i <= 10) { ...

§ Diese Ausdrücke werden ausgewertet --- Ergebnis entweder "true" oder "false"

§ Verwenden Vergleichsoperatoren

(55)

73

(56)

Gebrauch von if

Was fällt Ihnen in diesem Code Beispiel auf?

Scanner console = new Scanner(System.in);

System.out.print("Wieviele Punkte haben Sie erreicht? ");

int percent = console.nextInt();

if (percent >= 90) {

System.out.println("Ihre Note ist 6.0.");

}if (percent >= 80) {

System.out.println("Ihre Note ist 5.0.");

}if (percent >= 70) {

System.out.println("Ihre Note ist 4.0.");

}if (percent >= 60) {

System.out.println("Ihre Note ist 3.5.");

}if (percent < 60) {

System.out.println("Ihre Note ist 3.0.");

}...

(57)

Verschachtelte if-else Anweisungen

Auswahl bestimmt durch mehrere Tests

if (test) {

statement(s);

} else if (test) { statement(s);

} else {

statement(s); }

Gruppe 1 Anwei- sungen ausführen Ergibt test1 wahr? ja

nein

Gruppe 2 Anwei- sungen ausführen Ergibt test2 wahr?

Folgende Anweisung ausführen

ja nein

Gruppe 3 Anwei- sungen ausführen

(58)

Verschachtelte if-else Anweisungen

Beispiel:

if (x > 0) {

System.out.println("Positiv");

} else if (x < 0) {

System.out.println("Negativ");

} else {

System.out.println("Null");

}

Gruppe 1 Anwei- sungen ausführen Ergibt test wahr? ja

nein

Gruppe 2 Anwei- sungen ausführen Ergibt test wahr?

Folgende Anweisung ausführen

ja nein

Gruppe 3 Anwei- sungen ausführen

(59)

Verschachtelte if-else-if

§ Endet mit else: genau ein Pfad muss ausgeführt werden

§ Endet mit if: Eventuell wird keine Anweisung ausgeführt.

if (test) {

statement(s);

} else if (test) { statement(s);

} else if (test) { statement(s);

}

Gruppe 1 Anwei- sungen ausführen Ergibt test wahr? ja

nein

Gruppe 2 Anwei- sungen ausführen Ergibt test wahr? ja

nein

Gruppe 3 Anwei- sungen ausführen Ergibt test wahr? ja

nein

(60)

Verschachtelte if-else-if

if (place == 1) {

System.out.println("Gold!!");

} else if (place == 2) {

System.out.println("Silver!");

} else if (place == 3) {

System.out.println("Bronze.");

}

Gruppe 1 Anwei- sungen ausführen Ergibt test wahr? ja

nein

Gruppe 2 Anwei- sungen ausführen Ergibt test wahr? ja

Gruppe 3 Anwei- sungen ausführen Ergibt test wahr? ja

nein

(61)

Verschachtelte if Konstrukte

• Genau ein 1 Pfad (gegenseitiger Ausschluss)

if (test) {

statement(s); } else if (test) {

statement(s); } else {

statement(s);

}

• 0 oder 1 Pfad (gegenseitiger Ausschluss)

if (test) {

statement(s);

} else if (test) { statement(s); } else if (test) {

statement(s); }

• 0, 1, oder viele Pfade (unabhängig, kein gegenseitiger Ausschluss) if (test) {

statement(s);

}

if (test) {

statement(s);

} if (test) {

statement(s);

}

(62)

Welche if/else Kombination?

(1) if/if/if (2) verschachtelte if/else (3) verschachtelte if/else/if

§ Ob – abhängig von früheren Rennen – jemand in der ersten, zweiten, oder dritten Gruppe startet.

§ (2) verschachtelte if / else if / else

§ Ob es eine Medaille (Notendurschnitt ≥ 5.9) oder eine Urkunde (5.75-5.9) gibt.

§ (3) verschachtelte if / else if

§ Ob eine Zahl durch 2, 3, und/oder 5 teilbar ist.

§ (1) Folge von if / if / if

§ Note (auf 0.25 gerundet) aufgrund der Punkte (Prozent) in der Prüfung.

§ (2) verschachtelte if / else if / else if / else if / else

(63)

Verschachtelte if/else Beispiel

Formel für Body-Mass-Index (BMI):

§ Schreiben Sie ein Programm das folgenden Output produziert:

Dieses Programm erhebt die Daten fuer 2 Personen und berechnet den Body-Mass-Index(BMI).

Geben Sie die Daten fuer die naechste Person ein:

Laenge(in m)? 1.70 Masse(in kg)? 60

Geben Sie die Daten fuer die naechste Person ein:

Laenge(in m)? 1.65 Masse(in kg)? 75

BMI Weight class

< 18.5 Untergewicht 18.5 – <25 Normalgewicht 25.0 -- <30 Uebergewicht

≥ 30.0 Adipositas

(64)

Verschachtelte if/else Beispiel

Formel für Body-Mass-Index (BMI):

§ Schreiben Sie ein Programm das folgenden Output produziert:

Dieses Programm erhebt die Daten fuer 2 Personen und berechnet den Body-Mass-Index(BMI).

Person 1 BMI = 20.761245674740484 Normalgewicht

Person 2 BMI = 27.548209366391184 Uebergewicht

Differenz = 6.786963691650700

BMI Weight class

< 18.5 Untergewicht 18.5 – <25 Normalgewicht 25.0 -- <30 Uebergewicht

≥ 30.0 Adipositas

(65)

Nested if/else

System.out.println("Person " + number + " BMI = " + bmi);

if (bmi < 18.5) {

System.out.println(" Untergewicht ");

} else if (bmi < 25) {

System.out.println(" Normalgewicht ");

} else if (bmi < 30) {

System.out.println(" Uebergewicht ");

} else {

System.out.println(" Adipositas ");

}

(66)

Boolesche Operatoren

§ Vergleiche können durch boolesche Operatoren verknüpft werden

§ ”Wahrheitstabelle" für diese Operatoren, für Aussagen p und q:

Operator Description Example Result

&& and (2 == 3) && (-1 < 5) false

|| or (2 == 3) || (-1 < 5) true

! not !(2 == 3) true

p q p && q p || q true true true true true false false true false true false true false false false false

p !p

true false false true

(67)

Boolesche Ausdrücke

§ Vergleichsoperatoren haben eine tiefere Präzedenz als arithmetische Operatoren.

5 * 7 >= 3 + 5 * (7 - 1) 5 * 7 >= 3 + 5 * 6

35 >= 3 + 30 35 >= 33

true

§ Vergleichsoperatoren können nicht eine “Kette” bilden wie in Mathematik

2 <= x <= 10

true <= 10 (Annahme: x ist 15) error!

(68)

Boolesche Ausdrücke

§ Aussagen können mit && oder || kombiniert werden

2 <= x && x <= 10 (Annahme: x ist 15) true && false

false

§ Boolesche Operatoren haben eine tiefere Präzedenz als Vergleichsoperatoren.

§ Verwenden Sie Klammern um Klarheit zu schaffen

(69)

Beispiel

§ Welcher boolesche Ausdruck ergibt true wenn ein Jahr jahr ein Schaltjahr ist?

§ jahr ist Schaltjahr wenn jahr durch 4 teilbar ist (ohne Rest), jahr aber nicht durch 100 ohne Rest teilbar ist, es sei denn dass jahr ohne Rest durch 400 teilbar sei.

§ int jahr; // aktuelles Jahr

§ jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0

§ Besser mit Klammern:

((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0)

93

(70)

Boolesche Ausdrücke

§ Was ist das Ergebnis für die folgenden Ausdrücke?

int x = 42;

int y = 17;

int z = 25;

§ y < x && y <= z

§ x % 2 == y % 2 || x % 2 == z % 2

§ x <= y + z && x >= y + z

§ !(x < y && x < z)

§ (x + y) % 2 == 0 || !((z - y) % 2 == 0)

§ Answers: true, false, true, true, false

(71)

Faktorisierung

§ Sie erinnern sich an die Zerlegung einer Zahl in Primzahlen

§ Oder die Zerlegung von Polynomen

§ Faktorisierung

§ Idee: keine Ueberlappung

§ Faktorisierung (factoring) von Code : Herausarbeiten von gemeinsamen/redundanten Anweisungen

§ In der Praxis of Refaktorisierung (refactoring)

(72)

Faktorisierung für if/else Anweisungen

§ Example:

if (a == 1) {

System.out.println(a);

x = 3;

b = b + x;

} else if (a == 2) {

System.out.println(a);

x = 6;

y = y + 10;

b = b + x;

} else { // a == 3

System.out.println(a);

x = 9;

b = b + x;

}

System.out.println(a);

b = b + x;

(73)

Faktorisierung für if/else Anweisungen

§ Example:

if (a == 1) {

System.out.println(a);

x = 3;

b = b + x;

} else if (a == 2) {

System.out.println(a);

x = 6;

y = y + 10;

b = b + x;

} else { // a == 3

System.out.println(a);

x = 9;

b = b + x;

}

System.out.println(a);

x = 3 * a;

b = b + x;

(74)

Faktorisierung für if/else Anweisungen

§ Example:

if (a == 1) {

System.out.println(a);

x = 3;

b = b + x;

} else if (a == 2) {

System.out.println(a);

x = 6;

y = y + 10;

b = b + x;

} else { // a == 3

System.out.println(a);

x = 9;

b = b + x;

}

System.out.println(a);

x = 3 * a;

if (a == 2) { y = y + 10;

}

b = b + x;

(75)

Boolesche Ausdrücke

if (((x>0) && (y>0)) && (z > 0)) { // block 1

}

// more code

if (((x>0) && (y>0)) && (z >= 0)) { // block 2

}

§ Was ist an diesem Code Beispiel schlecht?

100

(76)

Boolesche Ausdrücke

if (((x>0) && (y>0)) && (z > 0)) { // block 1

}

// more code

if (((x>0) && (y>0)) && (z >= 0)) { // block 2

}

§ Was ist an diesem Code Beispiel schlecht?

§ (x>0) && (y>0) mehrfach berechnet 101

Referenzen

ÄHNLICHE DOKUMENTE

Um Eclipse einfacher zu starten, können Sie eine Verknüpfung erstellen.. Gehen Sie mit Ihrem Datei-Explorer in den Ordner, wo Sie Eclipse

§ Programm: Folge von Anweisungen, die von einem Computer ausgeführt werden (können).. § Programm realisiert

ArrayList § Java stellt die Klasse ArrayList für solche Listenobjekte zur Verfügung § "Array" erinnert daran, dass die Elemente über einen Index erreicht werden können § Die Anzahl

§ Schiedsrichter entscheidet ob das Symbol legal ist oder nicht (für diese EBNF Beschreibung)2. § Symbol legal gemäss einer Regel: alle Buchstaben des Symbols stimmen mit den

set( index , value ) replaces value at given index with given value size() returns the number of elements in list.. toString() returns a string representation of the list such as

§ Definiert einen Loop über alle Elemente einer Ansammlung (z.B., Set , List – die Interface Collection implementieren) oder eines

Eine Programmiersprache sollte es möglichst einfach machen, ein Programm zu lesen. Was ist

§ Eine Aussage gilt für den Zustand eines Programms wenn die Auswertung der Aussage mit dem Zustand das Ergebnis true ergibt. § Die Auswertung jedes Variable ergibt den Wert