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; }