Kapitel 5: Anweisungen

Werbung
Programmieren 1
WS 2001/02
Prof. Dr. V. Turau
FH Wiesbaden
Kapitel 5: Anweisungen
Folie 68 : Wertzuweisung
Syntax:
Variablenname ’=’ Ausdruck ’;’
Ausführung:
Der Ausdruck auf der rechten Seite wird ausgeführt
Der Wert des Ausdruckes wird der Variablen auf der linken Seite zugewiesen
Voraussetzung: Typkompatibilität
Beispiele:
int a = 1, b = 2;
a = 3 + 2 * (a + b); // Neuer Wert von a: 9
b = 7 - a/2;
// Neuer Wert von b: 3
Folie 69 : Wertzuweisung
Eine Zuweisung kann auch als Ausdruck verwendet werden
Der Wert einer Zuweisung ist der zugewiesene Wert
Beispiel:
int a = 9, b = 3, c,
c = 3 * (d = a + b +
// Neuer Wert von d:
// Neuer Wert von c:
d;
1);
13
39
Zuweisungen werden von rechts nach links abgearbeitet
Beispiel:
int a, b, c, d;
a = b = c = d = 5
// Alle Variablen bekommen den Wert 5
Folie 70 : Wertzuweisung
Wird der Wert einer Variablen in Abhängigkeit vom aktuellen Wert verändert, so gibt es eine
Kurzschreibweise:
Variablenname Operator= Ausdruck;
Beispiele:
a
c
c
d
+= 4;
*= 7;
/= 2 + b;
||= b;
//
//
//
//
a
c
c
d
=
=
=
=
a
c
c
d
+ 4;
* 7;
/ (2 + b)
|| b;
Vorsicht:
a *= 3/2
und a = a * 3/2 sind nicht gleichwertig!!
Folie 71 : Wertzuweisung
Erhöhen oder Erniedrigen des Inhalts einer Variablen um 1:
a++
a--
oder
oder
++a
--a
an Stelle von a += 1
an Stelle von a -= 1
Werden die Operatoren ++ und -- in einem Ausdruck verwendet, so muss zwischen ++a und
a++ unterschieden werden
Nachgestellter Operator: Ausführung nach Verwendung
Vorangestellter Operator: Ausführung vor Verwendung
Beispiel:
int a = 2, b = 3;
a *= b++;
b += 21 / --a;
// a ist: 6
// a ist: 5
b ist: 4
b ist: 8
Vorsicht: Nur Ausdrücke verwenden, die man 100% versteht!
Folie 72 : Bedingte Anweisung
Die Ausführung einer Anweisungen kann an eine Bedingung geknüpft werden
Syntax:
if (Bedingung)
Anweisung;
[else
Anweisung;]
Beispiel: Bis zu einem Kontostand von DM 10000 gibt es 3.5% Zinsen, ansonsten 4% Zinsen
Zinsberechnung:
if (kontoStand > 10000)
kontoStand *= 1.04;
else
kontoStand *= 1.035;
Folie 73 : Bedingte Anweisung
Sollen mehrere Anweisungen im if- oder im else-Teil ausgeführt werden, so müssen die
Anweisungen in Klammern gesetzt werden
Beachten Sie den Unterschied:
if (a > 5)
m = a;
else {
m = 6;
c = 4;
}
if (a
m =
else
m =
c =
> 5)
a;
6;
4; //Einrücken!
Fehler: else without if
if (a
m =
c =
else
m =
> 5)
a;
4;
6;
Folie 74 : Bedingte Anweisung
Sind mehrere bedingte Anweisungen mit else-Zweig ineinander verschachtelt, so wird ein
else-Zweig immer dem letzten if zugeordnet
Durch Gruppierung mit geschweiften Klammern kann eine andere Zuordnung erzwungen
werden.
Welche Ausgabe wird erzeugt?
int a = 6, b = 3;
if (a > 5) {
if (b > 4)
Out.println("A");
} else
Out.println("B");
// Keine Ausgabe
int a = 6, b = 3;
if (a > 5)
if (b > 4)
Out.println("A");
else
Out.println("B");
// Ausgabe: B
Folie 75 : Wiederholungsanweisung
Java bietet drei verschiedene Arten von Wiederholungsanweisungen
while-Anweisung
do-while-Anweisung
for-Anweisung
Grundsätzlich wäre nur eine der drei Anweisungen notwendig, da jede durch jede andere
ersetzt werden kann
Jeder Typ von Wiederholungsanweisung hat aber seine Vorteile
Folie 76 : while-Anweisung
Syntax:
’while’ ’(’ Bedingung ’)’
Anweisung;
Vor der Durchführung der Anweisung wird die Bedingung überprüft.
Beispiel: Addiere die Zahlen von 1 bis zu einer Obergrenze MAX
int summe = 0, zahl = 1;
while (zahl <= MAX) {
summe += zahl;
zahl++;
}
Was passiert wenn MAX <= 0 ist?
Folie 77 : do-while-Anweisung
Syntax:
’do’ ’{’
Anweisung;
’}’ ’while’ ’(’ Bedingung ’)’ ’;’
Nach der Durchführung der Anweisung wird die Bedingung überprüft.
Beispiel: Addiere die Zahlen von 1 bis zu einer Obergrenze MAX
int summe = 0, zahl = 1;
do {
summe += zahl;
zahl++;
}
while (zahl <= MAX);
Was passiert wenn MAX <= 0 ist?
Folie 78 : do-while-Anweisung
Dann ist summe = 1, d.h. das Programm ist nicht korrekt!
Für dieses Problem ist die while-Anweisung besser geeignet
Lösung mit do-while
int summe = 0, zahl = 1;
if (MAX > 0) {
do {
summe += zahl;
zahl++;
}
while (zahl <= MAX);
}
Geeignete Variante aussuchen!
Fuß- und kopfgesteuerte Wiederholung
Folie 79 : Beispiel
Ein Progamm soll solange Zeichen von der Tastatur lesen, bis ein ’x’ oder ein ’X’ eingegeben
wird
do-while-Anweisung:
char c;
do {
c = In.read();
} while (c != ’x’ && c != ’X’);
while-Anweisung:
char c;
c = In.read();
while (c != ’x’ && c != ’X’) {
c = In.read();
}
In diesem Fall muss die Anweisung einmal ausgeführt werden, bevor die Bedingung geprüft
werden kann. Deshalb ist die do-while-Anweisung besser geeignet!
Folie 80 : for-Anweisung
Syntax:
’for’ ’(’ Vorbereitung ’;’ Bedingung ’;’ Fortschaltung ’)’
Anweisung
Die for-Anweisung entspricht folgender while-Anweisung:
Vorbereitung ’;’
’while’ ’(’ Bedingung ’)’ ’{’
Anweisung ’;’
Fortschaltung ’;’
’}’
Beispiel: Addiere die Zahlen von 1 bis zu einer Obergrenze MAX
int summe = 0;
for (int zahl = 1; zahl <= MAX; zahl++)
summe += zahl;
Folie 81 : for-Anweisung
Die for-Anweisung ist geeignet, wenn die Anzahl der Wiederholungen zu Beginn feststeht
Häufig wird eine Laufvariable verwendet, diese wird in der Fortschaltung verändert
Die Ausführung der Fortschaltung erfolgt automatisch
Beispiel: Ausgabe der Quadrate der ungeraden Zahlen 1, 3, 5 ... 20
for (int i = 1; i <= 20; i+=2)
Out.println(i*i);
Mit einer while-Anweisung:
int i = 1;
while (i <= 20;) {
Out.println(i*i);
i+=2;
}
Folie 82 : Wiederholungsanweisungen
Die Laufvariable sollte nie durch Anwender verändert werden!
for (int i = 1; i <= 20; i+=2) {
Out.println(i*i);
i++;
}
Dies kann zu unkontrollierbaren Ergebnissen führen!
Eine Wiederholungsanweisung kann durch die Anweisung break vorzeitig verlassen werden
Ein Progamm soll solange Zeichen von der Tastatur lesen, bis ein ’x’ oder ein ’X’ eingegeben
wird
char c;
while (true) {
c = In.read();
if (c == ’x’ || c == ’X’)
break;
}
Herunterladen