Programmierkurs Java Operatoren, Ausdrücke und Anweisungen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Operatoren Operatortyp (sortiert nach Vorrang) Postfix expr++ expr-- • Unär ++expr --expr +expr -expr ~ ! Multiplikativ * / % Additiv + - Shift << >> >>> Vergleich < > <= Gleichheit == Bitweises AND & Bitweises XOR ^ Bitweises OR | Logisches AND && Logisches OR || Ternärer Operator ?: Zuweisung = += -= *= /= %= &= ^= |= <<= >>= >>>= Was können wir mit Variablen und deren Werten anfangen? – – – – – • Werte zuweisen Werte vergleichen Werte addieren Werte subtrahieren usw. Geschieht über Operatoren – Siehe auch http://download.oracle.com/j avase/tutorial/java/nutsandb olts/operators.html >= instanceof != #2 Operatoren • Berechnen neuen Wert (Ergebnis hat bestimmten Datentyp) • 1 + 1 – Ergebnis 2, Datentyp int • int i = 1; i = 2 * i; – Zwei Operatoren (= und *) – Ergebnis der Multiplikation: 2, Datentyp int; • 2.0 * 1; – Ergebnis: 2.0, Datentyp double • 3/2; – Ergebnis: 1, Datentyp int #3 Zuweisungsoperator (=) • Funktion: Weist einer Variablen einen Wert zu – Ergebnis der Berechnung der rechten Seite (RVALUE) wird der linken Seite (LVALUE der Variablen) zugewiesen – Rechte Seite wird zuerst ausgewertet – Wird die Variable rechts verwendet, so hat sie noch den „alten“ Wert • Beispiel – int myInt; myInt = 10; myInt = 12 * myInt / 2; myInt = 2 + 9; (entspricht 12 * 10 / 2 60) (entspricht 2+9 11) • Abkürzung: Deklaration und Zuweisung in einem – int myInt = 10; #4 Zuweisungsoperator (=): Beispiele • Beispiele (Deklaration + Zuweisung) – – – – – – – – char byte short int long float double boolean c b s i l f d bo • Zuweisung – bo = true; – bo = i; – f = i; – i = f; = = = = = = = = 'f'; 10; 20; 30; 11111111111; 10.001f; 10.001d; false; Ok Fehler: int boolean geht nicht Ok (Safe Conversion, int float) Fehler: Verlust von Genauigkeit #5 Zuweisungsoperator (=): Beispiele #6 Operatoren für Zahlenvergleiche • == (gleich) • != (ungleich) • > (größer) • >= (größer oder gleich) • < (kleiner) • <= (kleiner oder gleich) • Ergebnis • Beispiel – int i = 0; int j = 10; System.out.println( i == j ); System.out.println( j < 10 ); • Ausgabe – false false – boolean-Wert – Werte: true oder false #7 Operatoren für Boolesche Ausdrücke • && • || • ! (und-Verknüpfung) (oder-Verknüpfung) (Negation) • Geben jeweils einen boolean-Wert zurück • Beispiel – System.out.println( ( (false && true) || !(1==2) ) ); • Ausgabe – true #8 Operatoren für Zahlenarithmetik • • • • • + * / % (Addition) (Subtraktion) (Multiplikation) (Division) (Rest-Operator) • Geben jeweils einen Zahlenwert zurück • Beispiel – System.out.println(3 + 9.5); – System.out.println(10 % 8); // 12.5, double // 2, int #9 Weitere Operatoren für Zahlenarithmetik • ++ (Inkrement) • int i = 3; • -- (Dekrement) • i++; System.out.println(i); // "4" • ++i; System.out.println(i); // "5" • System.out.println(++i); //"6" • System.out.println(i++); // "6" • System.out.println(i); // "7" • Geben jeweils einen Zahlenwert zurück • Nicht frei von Nebeneffekten • Je in zwei Varianten verfügbar – i++ (Post-Inkrement) – i-- (Post-Dekrement) – ++i (Prä-Inkrement) – --i (Prä-Dekrement) #10 Operatoren zur Typumwandlung • Explizite Typumwandlung (Casting) – – – – Syntax: (Datentyp) Wert Gibt Wert (der Variablen/Konstante) im angegeben Datentyp zurück Java handhabt Datentypen sehr strikt Typkonvertierungen müssen explizit angeben werden • Falsch – int i = 3.5f * 6; – int i = (int) 3.7f * 6; // Rechter Ausdruck: Typ float // Ergebnis: 3 * 6 = 18 • Richtig – int i = (int)(3.7f * 6); // Ergebnis: 3.5 * 6 = 22.2 22 #11 Ausdrücke und Anweisungen Ausdruck (engl.: expression) • Kann aus Operatoren, Variablen, Literalen und Funktionen (später) bestehen • Berechnet einen Wert eines bestimmten Datentyps • Beispiele – – – – – 1 Wert: 1, Typ: int 1 + 2 Wert: 3, Typ: int 1 + 2.0 Wert 3.0, Typ: double 3.098 * 12.7 + 8 / 7.0 Wert 40.48...,Typ double (char) ( 'a' + 7 ) Wert ‘h’, Typ char #13 Beispiel Datei: Beispiele\08-Java-Grundlagen\8-Ausdruecke\Ausdruecke.java #14 Anweisungen (Statements) • Anweisungen müssen (anders als Ausdrücke) keinen Wert zurückgeben – Jeder Ausdruck ist auch eine Anweisung (Wert des Ausdrucks wird ignoriert) – Mehrere Ausdrücke werden durch ; getrennt (sequentielle Ausführung) • Beispiel: System.out.println(“Hallo“); – Gibt Hallo auf der Konsole aus, berechnet aber keinen Wert • Spezielle Anweisung: Blockanweisung – Gruppiert Menge von Anweisungen/Ausdrücken zu einer Anweisung – Syntax: { <keine oder mehrere Anweisungen> } – Beispiel: {} – Beispiel: { int i=1+2; System.out.println(“Hallo“); i=i*2; } #15 Ausgeben und Einlesen von Zeichen • Bisher: Ausgabe auf der Konsole – Zwei Ausgabe-“Ströme“: Standard (System.out) und Fehler (System.err) – Trennen von „echten“ Ausgabedaten und Fehlern – Normal nicht unterscheidbar, können einzeln „umgeleitet“ werden (siehe GUE Unix) • Standardausgabe: System.out – System.out.println(“Hallo Welt“); „Hallo Welt“ und beginnt neue Zeile – System.out.print(“Hallo Welt“); „Hallo Welt“ (ohne neue Zeile zu beginnen) – System.out.println(); Beginnt nur eine neue Zeile • Fehlerausgabe: System.err – System.err.println(“Das sollte nicht passieren“); #16 Beispiel: System.out und System.err #17 Exkurs: Einlesen von Zeichen • Wie liest man nun Zeichen von der Tastatur ein? – Passendes Gegenstück: System.in • Beispiel: Ein Zeichen von Tastatur lesen – char c = (char) System.in.read(); – Warum der Typ-Cast? – Woher weiß man das? • Umfangreiche Dokumentation von Java – Sog. Javadoc – http://docs.oracle.com/javase/7/docs/api/java/lang/System.html #18 Beispiel #19