252-0027 Einführung in die Programmierung

Werbung
252-0027
Einführung indie Programmierung
2.3.2Verschachtelte Schleifen
2.4Methoden mit Parametern
2.5“if”-Anweisungen
ThomasR.Gross
DepartmentInformatik
ETHZürich
Uebersicht
§
2.2Typen undVariable
§
§
Deklaration vonVariablen
2.3Schleifen (Loops)
§
§
2.3.1“for”Loops
2.3.2Verschachtelte Schleifen
§
2.4Methoden mit Parametern
§
2.5“if”-Anweisungen
§
2.6Nochmals Schleifen
§
§
“while”Loops
2.XInput
3
2.3.2Verschachtelte for Schleifen
for Schleife
for (initialization; test; update) {
statement;
statement;
...
statement;
}
header (Kopf)
body (Rumpf)
statement(Anweisung im Rumpf derSchleife)kann beliebige Java
Anweisung sein
Auch wieder eine Schleife ….
Verschachtelte Schleifen
§ Verschachtelte Schleifen ("nestedloop"):Schleife ineiner
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
}
§ DerRumpf deräusseren Schleife wird 5-mal
ausgeführt,derRumpf derinneren (Schleife)
10-mal(jedesmal)
Output:
**********
**********
**********
**********
**********
Verschachtelte Schleifen
Wasgibt diesesProgrammsegment aus?
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
§ Output:
System.out.println();
*
}
**
***
****
*****
Verschachtelte Schleifen
Wasgibt diesesProgrammsegment aus?
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i);
§ Output:
}
System.out.println();
1
}
22
333
4444
55555
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
§ Beispiele:
for (int i = 1; i <= 5; i++) {
for (int j = 1; i <= 10; j++) {
System.out.print("*");
}
System.out.println();
}
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
§ Beispiele:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; i++) {
System.out.print("*");
}
System.out.println();
}
Wastun?
§ Eclipsekann 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?
innere Schleife (für jede Zeile)
....1
...2
..3
.4
5
äussere Schleife (5-mal da es 5 Zeilen gibt)
§ Wir müssen eine Ausgabezeile konstruieren:
§ mit einer äusseren Schleife für jede Zeile
§ mit innerer(n)Schleife(n)für dasMusterjeder Zeile
Äussere undinnere Schleife
§ Legen Sie erst dieäussere Schleife fest,zählt von1bis zur Anzahl derZeilen
for (int line = 1; line <= 5; line++) {
...
}
§ Analysieren Sie jede Zeile.Entdecken Sie dasMuster:
§ ein paar Punkte (0Punkte inderletzten Zeile)gefolgt vonZahl
....1
...2
..3
.4
5
Beobachtung:DieAnzahl der
Punkte hängt vonder
Zeilennummer ab.
Zahlenfolgen à Schleifen
for (int count = 1; count <= 5; count++) {
System.out.print( ... );
}
Welche Anweisung im Rumpf würde diesen Outputergeben:
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 Outputergeben:
2 7 12 17 22
§ Zum Finden desMusterserstellen Sie eine Tabelle mit count unddenZahlen.
§ Wenn sich count um1erhöht,sollte dieZahl um5heraufgehen.
§ Abercount * 5 ist zu gross(um3),alsosubtrahieren wir 3.
count
Zahl in Folge
5 * count
5 * count - 3
1
2
5
2
2
7
10
7
3
12
15
12
4
17
20
17
5
22
25
22
Weiteres Tabellen Beispiel
§ Welche Anweisung im Rumpf würde diesen Outputergeben:
17 13 9 5 1
§ Konstruieren wir dieTabelle.
§ Wenn sich count um1erhöht,sollte dieZahl ...
§ AberdiesesProdukt ist zu ...
count
Zahl in Folge
-4 * count
-4 * count + 21
1
17
-4
17
2
13
-8
13
3
9
-12
9
4
5
-16
5
5
1
-20
1
Zurück zum Beispiel mit for Schleife
§ Konstruieren wir eine Tabelle
....1
...2
..3
.4
5
line
# Punkte
-1 * line
-1 * line + 5
1
4
-1
4
2
3
-2
3
3
2
-3
2
4
1
-4
1
5
0
-5
0
§ Umeinen Buchstaben mehrfach zu drucken verwenden wir eine for Schleife.
for (int j = 1; j <= 4; j++) {
System.out.print(".");
}
// 4 Punkte
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(".");
}
§ Output:
System.out.println(line);
....1
}
...2
..3
.4
5
Verschachtelte for Schleifen
§ Wasist derOutputdieser 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++) {
§ Answer:
System.out.print(line);
....1
}
...22
System.out.println();
..333
}
.4444
55555
Verschachtelte for Schleifen Uebung
§ Verändern Sie dasletzte Programm sodass dieser Output
erzeugt wird:
....1
...2.
..3..
.4...
5....
Verschachtelte for Schleifen Uebung
Verändern Sie dasletzte Programm sodass dieser Outputerzeugt 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.4Methoden mit Parametern
31
Zurück zu unserem einfachen Beispiel
§ Wir sich nicht andieRegeln hält musssie 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 andieRegeln hält musssie 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 …
§ WaswennwirauchandereAnzahl Wiederholungen wollen?
§ OK,keinechtesThemaaberesgehtunsjaumdasPrinzip
§ WirbraucheneinenWeg,dieAnzahlderWiederholungender
Situationanzupassen
§ Parametrisierung:mit (veränderbaren)Parametern versehen
36
Parametrisierung
§ Parameter:Ein Wertdeneine aufgerufene Methode vonder
aufrufenden Methode erhält.
§ Statt strafe5, strafe10, strafe15 entwicklen
wir eine Methode flexstrafe sodass verschiedene
Wiederholungen gewählt werden können.
§ Wenn wir eine Methode deklarieren dann geben wir an,dass diese
Methode einen Parameterbraucht.
§ Wenn wir dieMethodaufrufen,dann geben wir einen Wertfür
denParameteran.
Parametrisierung
main
5
10
flexstrafe
flexstrafe
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Ich werde dieSchulhausregeln beachten
Parameterdeklarationen
Gibt andass eine Methode einen Parameterbraucht 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 andass eine Methode einen Parameterbraucht um
ausgeführt werden zu können
public static void name ( type name ) {
statement;
}
name:ParameterVariable
§ Beispiel:
public static void echoPin(int code) {
System.out.println(”Die Geheimnummer ist: " + code);
}
Parameterdeklarationen
Gibt andass eine Methode einen Parameterbraucht um
ausgeführt werden zu können
public static void name ( type name ) {
statement;
}
§ Beispiel:
§ Wenn echoPin aufgerufen
wird dann mussderAufrufer
einen int Wertangeben.
public static void echoPin(int code) {
System.out.println(”Die Geheimnummer ist: " + code);
}
Wert(e)für Parameter
Beim Aufruf einer Methode mussein Wertfür denParameterangegeben
werden.
name (expression);
§ Beispiel:
public static void main(String[] args) {
echoPin(42);
echoPin(12345);
}
§
Output
Die Geheimnummer ist:
Die Geheimnummer ist:
42
12345
Wie werden Parameterübergeben?
§ Uebergeben:vom Aufrufer zur aufgerufenen Methode
§ Wenn eine Methode aufgerufen wird dann:
§ Der Wertwird inder ParameterVariablegespeichert
§ DieAnweisungen derMethode werden ausgeführt (mit diesem Wert
für dieParameterVariable).
§ DerWert,denderAufrufer übergibt,kann durch eine Variable
gegeben sein
§ DerWertkann durch einen Ausdruck berechnet werden
§
Eine Konstante (Literal)ist auch ein Ausdruck
§ Zurück zum Beispiel:
Methode mit Parameter
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 ParameterinderDeklaration einer Methode heisst
formaler Parameter(“formalparameter”)
§ Formalparameter:definiert Variable(legt Typ undNamen fest!)
§ Derübergebene Wertheisst tatsächlicher Parameter(“actual
parameter”)oder Argument(“argument”)
§ Aktuell:augenblicklich,derzeitig [Duden]
§ Aktueller Wert
Parameter
Ein Parameterkann inderMethode wie jede Variableverwendet
werden (z.B.Anzahl derIterationen 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);
3
7
}
public static void printPunkt(int times) {
for (int i = 1; i <= times; i++) {
System.out.println(“.");
}
}
Mögliche Fehler
§ Wenn eine Methode einen Parametererwartet dann muss
dieser auch übergeben werden.
printPunkte();
required
// ERROR: parameter value
§ Der Wertmussdenrichtigen Typ hben
printPunkte(3.7);
// ERROR: must be of type int
DieRegeln für Umwandlungen gelten auch hier
Mehrere Parameter
§ Eine Methode kann mehrere Parametererwarten (getrennt
durch ,inDeklaration undim Aufruf)
§ Wenn dieMethode aufgerufen wird mussein Wertfür jeden
Parameterangegeben 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 Wertwird inderParameterVariablegespeichert
§ DieAnweisungen derMethode werden ausgeführt (mit diesem Wert
für dieParameterVariable).
§ DerWert,denderAufrufer übergibt,kann durch
einen Ausdruck (Expression)gegeben sein
§ DerWertdesExpressionswird berechnet
§ Dieaufgerufene Methode erhält denWertundhatkeine
Kenntnis wie derWertberechnet wurde
Uebergabe vonWerten (“Valuesemantics”)
public static void main(String[] args) {
printPunkt(3);
printPunkt(3+4);
}
3
7
public static void printPunkt(int times) {
for (int i = 1; i <= times; i++) {
System.out.println(“.");
}
}
Wie werden Parameterübergeben?
§ Wenn eine Methode aufgerufen wird:
§ Derübergebene Wertwird inderParameterVariablegespeichert
§ DieAnweisungen derMethode werden ausgeführt (mit diesem Wert
für dieParameterVariable).
§ DerWert,denderAufrufer übergibt,kann durch eine Variable
gegeben sein
§ Der Wertder Variablewird verwendet
§ Dieaufgerufene Methode erhält denWertundhatkeine Kenntnis wie
derWertberechnet wurde
§ Insbesondere kennt dieaufgerufene Methode nicht dieVariablen des
Aufrufers
Uebergabe vonWerten (“Valuesemantics”)
§ Gegeben ein ParameterP eines Basistyps (int,double,…)
§ Wenn dasArgumentdurch eine VariableV bestimmt wird
dann wird derWertdieser Variablekopiert,d.h.Pwird auf
denWertvonV gesetzt
§ Wir sprechen von“valuesemantics”
§ Veränderungen derParameterVariableP inderaufgerufenen
Methode haben keine Auswirkung aufV.
Uebergabe vonWerten (“Valuesemantics”)
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 vonWerten (“Valuesemantics”)
§ valuesemantics bedeutet dass (nur)derWertübergeben
wird
§ Veränderungen derParameterVariableinderaufgerufenen Methode
haben keine Auswirkung aufV.
§ Nameeines aktuellen Parameters(wenn eine Variableverwendet
wird)ist unwichtig.
63
Uebersicht
§ 2.5"if"Anweisungen
§ 2.6Nochmal Schleifen
64
if Anweisung ("if-statement")
§ Führt eine Anweisung (oder Anweisungen)nur aus wenn ein
TestdenWertwahr ("true")ergibt.
if (test) {
statement;
...
statement;
}
§ Beispiel:
nein
Ist testwahr?
ja
Anweisung(en)
ausführen
Folgende Anweisung
ausführen
double punkte = console.nextDouble();
if (punkte >= 50.0) {
System.out.println("Pruefung bestanden.");
}
if-else Anweisung
§ Führt einen Gruppe vonAnweisungen aus wenn ein TestdenWertwahr
("true")ergibt,sonst eine andere Gruppe
if (test) {
nein
ja
statement(s);
Ist testwahr?
} else {
statement(s);
"else"Anweisung(en)
"if"Anweisung(en)
ausführen
ausführen
}
§ Beispiel:
Folgende Anweisung
double punkte = console.nextDouble();
ausführen
if (punkte >= 50.0) {
System.out.println("Pruefung bestanden.");
} else {
System.out.println("Pruefung nicht bestanden.");
}
Boolesche Ausdrücke
§ if Anweisungen undfor 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 vonif
Wasfällt Ihnen indiesem CodeBeispiel 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);
}
nein
Ergibt test1wahr?
nein
Ergibt test2wahr?
Gruppe 3Anweisungen ausführen
ja
Gruppe 1Anweisungen ausführen
Gruppe 2Anweisungen ausführen
Folgende Anweisung
ausführen
ja
Verschachtelte if-else Anweisungen
Beispiel:
if (x > 0) {
nein
System.out.println("Positiv");
Ergibt testwahr?
ja
} else if (x < 0) {
System.out.println("Negativ");
nein
Ergibt testwahr?
ja
Gruppe 1Anweisungen ausführen
} else {
System.out.println("Null");
Gruppe 3Anweisungen ausführen
Gruppe 2Anweisungen ausführen
}
Folgende Anweisung
ausführen
Verschachtelte if-else-if
§ Endet mit else:genau ein Pfad mussausgeführt werden
§ Endet mit if:Eventuell wird keine Anweisung ausgeführt.
nein
ja
if (test) {
Ergibt testwahr?
statement(s);
} else if (test) {
Gruppe 1Anweinein
ja
Ergibt testwahr?
sungen ausführen
statement(s);
} else if (test) {
Gruppe 2Anweinein
ja
Ergibt testwahr?
sungen ausführen
statement(s);
}
Gruppe 3Anweisungen ausführen
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.");
}
nein
nein
Ergibt testwahr?
Ergibt testwahr?
Ergibt testwahr?
ja
ja
Gruppe 1Anweisungen ausführen
Gruppe 2Anweisungen ausführen
Gruppe 3Anweisungen ausführen
ja
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 vonfrüheren Rennen – jemand inderersten,zweiten,oder dritten Gruppe startet.
§ (2)
§
Obes eine Medaille (Notendurschnitt ≥ 5.9)oder eine Urkunde (5.75-5.9)gibt.
§ (3)
§
verschachtelte if / else if
Obeine Zahl durch 2,3, und/oder 5teilbar ist.
§ (1)
§
verschachtelte if / else if / else
Folge vonif / if / if
Note(auf0.25gerundet)aufgrund derPunkte (Prozent)inderPrüfung.
§ (2)
verschachtelte if / else if / else if / else if / else
Verschachtelte if/else Beispiel
Formelfür Body-Mass-Index(BMI):
BMI
< 18.5
18.5 – <25
25.0 -- <30
≥ 30.0
Weight class
Untergewicht
Normalgewicht
Uebergewicht
Adipositas
§ Schreiben Sie ein Programm dasfolgenden Outputproduziert:
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
Verschachtelte if/else Beispiel
Formelfür Body-Mass-Index(BMI):
BMI
< 18.5
18.5 – <25
25.0 -- <30
≥ 30.0
Weight class
Untergewicht
Normalgewicht
Uebergewicht
Adipositas
§ Schreiben Sie ein Programm dasfolgenden Outputproduziert:
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
Nestedif/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
Operator
&&
Description
and
Example
(2 == 3) && (-1 < 5)
Result
false
||
or
(2 == 3) || (-1 < 5)
true
!
not
!(2 == 3)
true
§ ”Wahrheitstabelle"für diese Operatoren,für Aussagen p undq:
p && q
p
true
q
true
true
false false
false true
true
false
false false false
p || q
true
true
p
true
false
true
false
true
false
!p
Boolesche Ausdrücke
§ Vergleichsoperatoren haben eine tiefere Präzedenz als arithmetische
Operatoren.
5 * 7
5 * 7
35
35
true
>=
>=
>=
>=
3 + 5 * (7 - 1)
3 + 5 * 6
3 + 30
33
§ Vergleichsoperatoren können nicht eine “Kette”bilden wie inMathematik
2 <= x <= 10
true
<= 10
error!
(Annahme:x ist 15)
Boolesche Ausdrücke
§ Aussagen können mit && oder || kombiniert werden
2 <= x && x <= 10
true
&& false
false
(Annahme:x ist 15)
§ Boolesche Operatoren haben eine tiefere Präzedenz als
Vergleichsoperatoren.
§ Verwenden Sie Klammern umKlarheit zu schaffen
Beispiel
§ Welcher boolesche Ausdruck ergibt true wenn ein Jahr
jahr ein Schaltjahr ist?
§ jahr ist Schaltjahr wenn jahr durch 4teilbar ist (ohne Rest),jahr
aber nicht durch 100ohne Restteilbar ist,es sei denn dass jahr ohne
Restdurch 400teilbar 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
§ Wasist dasErgebnis für diefolgenden 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 andieZerlegung einer Zahl inPrimzahlen
§ OderdieZerlegung vonPolynomen
§ Faktorisierung
§ Idee:keine Ueberlappung
§ Faktorisierung (factoring)vonCode:Herausarbeiten von
gemeinsamen/redundanten Anweisungen
§ Inder PraxisofRefaktorisierung (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
}
§ Wasist andiesem CodeBeispiel 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
}
§ Wasist andiesem CodeBeispiel schlecht?
§ (x>0) && (y>0) mehrfach berechnet
101
Herunterladen