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
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
2.3.2 Verschachtelte for Schleifen
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)
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)
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:
*
**
***
*********
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
Mögliche Fehler
§ Die Schleife terminiert nicht
§ Läuft und läuft und läuft
§ Endlosschleife ("infinite loop")
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();
}
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();
}
Was tun?
§ Eclipse kann solche Programme stoppen.
§ Klicken auf "Terminate"
17
Mehr Beispiele
§ Welche verschachtelten for Schleifen erzeugen diesen Output?
....1 ...2 ..3 .4 5
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)
Ä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.
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 + " ");
}
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
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
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
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
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
Verschachtelte for Schleifen Uebung
§ Verändern Sie das letzte Programm so dass dieser Output erzeugt wird:
....1 ...2.
..3..
.4...
5....
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();
}
2.4 Methoden mit Parametern
31
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
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
Mit Methode
public static void strafe () {
for (int i = 1; i <= 5; i++) { System.out.println(
"Ich werde die Schulhausregeln beachten");
}
} // end strafe
34
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
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
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.
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
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);
}
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
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.
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
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
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
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
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: …
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
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
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);
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);
} } }
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
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
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
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.
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
60
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.
63
Uebersicht
§ 2.5 "if" Anweisungen
§ 2.6 Nochmal Schleifen
64
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
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
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
73
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.");
}...
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
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
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
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
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);
}
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
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
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
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 ");
}
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
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!
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
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
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
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)
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;
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;
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;
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
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