Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben ein Datentyp, der schon bei der Kompilierung festgelegt wird.
|
|
- Stefanie Lioba Kneller
- vor 6 Jahren
- Abrufe
Transkript
1 5 Mehr Java Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben ein Datentyp, der schon bei der Kompilierung festgelegt wird. Java unterscheidet zwei Arten von Typen: Basistypen / Primitive Datentypen byte, char, short, int, long, float, double, boolean Referenzdatentypen kann man auch selber definieren Harald Räcke 66/656
2 5 Mehr Java Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben ein Datentyp, der schon bei der Kompilierung festgelegt wird. Java unterscheidet zwei Arten von Typen: Basistypen / Primitive Datentypen byte, char, short, int, long, float, double, boolean Referenzdatentypen kann man auch selber definieren 5 Mehr Java Harald Räcke 66/656
3 Beispiel Statische Typisierung a = 5 a = a + 1 a = "Hello World." # a is now a string a = a + 1 # runtime error Python int a; a = 5; a = "Hello World." // will not compile Java 5 Mehr Java Harald Räcke 67/656
4 5.1 Basistypen Primitive Datentypen Zu jedem Basistypen gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt den gleichen Platz, um ihn im Rechner zu repräsentieren. Der Platz wird in Bit gemessen. Wie viele Werte kann man mit n Bit darstellen? 5.1 Basistypen Harald Räcke 68/656
5 Primitive Datentypen Ganze Zahlen Es gibt vier Sorten ganzer Zahlen: Typ Platz kleinster Wert größter Wert byte short int long Die Benutzung kleinerer Typen wie byte oder short spart Platz. 5.1 Basistypen Harald Räcke 69/656
6 Primitive Datentypen Ganze Zahlen Literale: dezimale Notation hexadezimale Notation (Präfix 0x oder 0X) oktale Notation (Präfix 0) binäre Notation (Präfix 0b oder 0B) Suffix l oder L für long _ um Ziffern zu gruppieren Beispiele 192, 0b , 0xC0, 0300 sind alle gleich 20_000L, 0xABFF_0078L 09, 0x_FF sind ungültig 5.1 Basistypen Harald Räcke 70/656
7 Primitive Datentypen Ganze Zahlen Literale: dezimale Notation hexadezimale Notation (Präfix 0x oder 0X) oktale Notation (Präfix 0) binäre Notation (Präfix 0b oder 0B) Suffix l oder L für long _ um Ziffern zu gruppieren Beispiele 192, 0b , 0xC0, 0300 sind alle gleich 20_000L, 0xABFF_0078L 09, 0x_FF sind ungültig 5.1 Basistypen Harald Räcke 70/656
8 Primitive Datentypen Ganze Zahlen Achtung: Java warnt nicht vor Überlauf/Unterlauf!!! Beispiel: 1 int x = ; // groesstes int 2 x = x + 1; 3 write(x); liefert:
9 Primitive Datentypen Gleitkommazahlen Es gibt zwei Sorten von Gleitkommazahlen: Typ Platz kleinster Wert größter Wert signifikante Stellen float 32 ca ca ca. 7 double 64 ca ca ca. 15 x = s m 2 e mit 1 m < 2 Vorzeichen s: 1 bit reduzierte Mantisse m 1: 23 bit (float), 52 bit (double) Exponent e: 8 bit (float), 11 bit (double) 5.1 Basistypen Harald Räcke 72/656
10 Primitive Datentypen Gleitkommazahlen Literale: dezimale Notation. dezimale Exponentialschreibweise (e, E für Exponent) hexadeximale Exponentialschreibweise. (Präfix 0x oder 0X, p oder P für Exponent) Suffix f oder F für float, Suffix d oder D für double (default is double) Beispiele 640.5F == 0x50.1p3f == E-2 0x1e3_dp0, 1e3d 0x1e3d, 1e3_d
11 Primitive Datentypen Gleitkommazahlen Überlauf/Unterlauf bei Berechnungen liefert Infinity, bzw. -Infinity Division Null durch Null, Wurzel aus einer negativen Zahl etc. liefert NaN
12 Weitere Basistypen Typ Platz Werte boolean 1 true,false char 16 all Unicode-Zeichen Unicode ist ein Zeichensatz, der alle irgendwo auf der Welt gängigen Alphabete umfasst, also zum Beispiel: die Zeichen unserer Tastatur (inklusive Umlaute); die chinesischen Schriftzeichen; die ägyptischen Hieroglyphen... Literale: char-literale schreibt man in Hochkommas: A, \u00ed, ;, \n. boolean-literale sind true und false.
13 5.2 Strings Der Datentyp String für Wörter ist ein Referenzdatentyp (genauer eine Klasse (dazu kommen wir später)). Hier nur drei Eigenschaften: Literale vom Typ String haben die Form "Hello World!"; Man kann Wörter in Variablen vom Typ String abspeichern; Man kann Wörter mithilfe des Operators + konkatenieren. 5.2 Strings Harald Räcke 76/656
14 Beispiel String s0 = " " ; String s1 = " Hel " ; String s2 = " lo Wo" ; String s3 = " rld! " ; write ( s0 + s1 + s2 + s3 ) ;... liefert: Hello World! 5.2 Strings Harald Räcke 77/656
15 5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n t a, i n t b) implementieren, die das Minimum ihrer Argumente zurückliefert. Operatoren sind spezielle vordefinierte Funktionen, die in Infix-Notation geschrieben werden (wenn sie binär sind): a + b = +(a, b) 5.3 Auswertung von Ausdrücken Harald Räcke 78/656
16 5.3 Auswertung von Ausdrücken Ein Ausdruck ist eine Kombination von Literalen, Operatoren, Funktionen, Variablen und Klammern, die verwendet wird, um einen Wert zu berechnen. Beispiele: (x z.b. vom Typ int) 3 / min(3,x) + 20 x = 7 x *= Auswertung von Ausdrücken Harald Räcke 79/656
17 Operatoren Unäre Operatoren: symbol name types L/R level ++ Post-increment () zahl, char links 2 -- Post-decrement () zahl, char links 2 ++ Pre-increment () zahl, char rechts 3 -- Pre-decrement () zahl, char rechts 3 + unäres Plus zahl, char rechts 3 - unäres Minus zahl, char rechts 3! Negation boolean rechts Auswertung von Ausdrücken Harald Räcke 80/656
18 Achtung 5.3 Auswertung von Ausdrücken Harald Räcke 81/656
19 Prefix- und Postfixoperator Die Operatoranwendungen ++x und x++ inkrementieren beide den Wert der Variablen x (als Seiteneffekt). ++x tut das, bevor der Wert des Ausdrucks ermittelt wird (Pre-Increment). x++ tut das, nachdem der Wert ermittelt wurde (Post-Increment). b = x++; entspricht: b = ++x; entspricht: b = x ; x = x + 1; x = x + 1; b = x ; 5.3 Auswertung von Ausdrücken Harald Räcke 82/656
20 Operatoren Binäre arithmetische Operatoren: byte, short, char werden nach int konvertiert symbol name types L/R level * Multiplikation zahl, char links 4 / Division zahl, char links 4 % Modulo zahl, char links 4 + Addition zahl, char links 5 - Subtraktion zahl, char links 5 Konkatenation symbol name types L/R level + Konkatenation string links Auswertung von Ausdrücken Harald Räcke 83/656
21 Operatoren Vergleichsoperatoren: symbol name types L/R level > größer zahl, char links? 7 >= größergleich zahl, char links? 7 < kleiner zahl, char links? 7 <= kleinergleich zahl, char links? 7 == gleich primitiv links 8!= ungleich primitiv links Auswertung von Ausdrücken Harald Räcke 84/656
22 Operatoren Boolsche Operatoren: symbol name types L/R level && Und-Bedingung boolean links 12 Oder-Bedingung boolean links Auswertung von Ausdrücken Harald Räcke 85/656
23 Operatoren Zuweisungsoperatoren: symbol name types L/R level = Zuweisung, wert rechts 15 *=,/=, %=, +=, -= Zuweisung, wert rechts 15 Für die letzte Form gilt: v = a v = (type(v)) (v a) 5.3 Auswertung von Ausdrücken Harald Räcke 86/656
24 Operatoren Warnung: Eine Zuweisung x = y; ist in Wahrheit ein Ausdruck. Der Wert ist der Wert der rechten Seite. Die Modifizierung der Variablen x erfolgt als Seiteneffekt. Das Semikolon ; hinter einem Ausdruck wirft nur den Wert weg. Fatal für Fehler in Bedingungen: boolean x = false ; i f ( x = true ) write ( " Sorry! This must be an error... " ) ; 5.3 Auswertung von Ausdrücken Harald Räcke 87/656
25 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
26 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
27 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
28 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
29 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
30 5.3 Auswertung von Ausdrücken Assoziativität Die Assoziativität entscheidet über die Reihenfolge bei Operatoren gleicher Priorität. (links = der linkeste Operator wird zuerst ausgeführt) Alle Operatoren einer Prioritätsgruppe haben dieselbe Assoziativität. Bis auf Zuweisungsoperatoren (=, +=, etc.) sind alle binären Operatoren linksassoziativ. unäre Operatoren, die ihr Argument rechts erwarten sind rechtsassoziativ unäre Operatoren, die ihr Argument links erwarten (postfix-operatoren ++, --) sind linksassoziativ Der ternäre Bedingungsoperator (später) ist rechtsassoziativ
31 5.3 Auswertung von Ausdrücken Die Auswertung eines Ausdrucks liefert eine Variable (), einen reinen Wert () oder void (void) In den ersten beiden Fällen hat der Ausdruck dann einen Typ, z.b.: int, und einen Wert, z.b.: 42 Für z.b. Zuweisungen muss die Auswertung des Ausdrucks auf der linken Seite eine Variable ergeben!!! 5.3 Auswertung von Ausdrücken Harald Räcke 89/656
32 5.3 Auswertung von Ausdrücken In Java werden Unterausdrücke von links nach rechts ausgewertet. D.h. um den Wert einer Operation zu berechnen: werte (rekursiv) alle Operanden von links nach rechts aus führe die Operation auf den Resultaten aus Ausnahmen:, &&, und der ternäre Bedingungsoperator :?, werten nicht all Operanden aus (Kurzschlussauswertung). Man sollte nie Ausdrücke formulieren, deren Ergebnis von der Auswertungsreihenfolge abhängt!!! 5.3 Auswertung von Ausdrücken Harald Räcke 90/656
33 5.3 Auswertung von Ausdrücken In Java werden Unterausdrücke von links nach rechts ausgewertet. D.h. um den Wert einer Operation zu berechnen: werte (rekursiv) alle Operanden von links nach rechts aus führe die Operation auf den Resultaten aus Ausnahmen:, &&, und der ternäre Bedingungsoperator :?, werten nicht all Operanden aus (Kurzschlussauswertung). Man sollte nie Ausdrücke formulieren, deren Ergebnis von der Auswertungsreihenfolge abhängt!!! 5.3 Auswertung von Ausdrücken Harald Räcke 90/656
34 5.3 Auswertung von Ausdrücken Im folgenden betrachten wir Klammern als einen Operator der nichts tut: symbol name types L/R level ( ) Klammerung * links Auswertung von Ausdrücken Harald Räcke 91/656
35 Beispiel: 2 + x * (z - d) 2 + x * ( z d )
36 Beispiel: 2 + x * (z - d) 2 + x * ( z d )
37 Beispiel: 2 + x * (z - d) 2 + x * ( z d )
38 Beispiel: 2 + x * (z - d) 2 + x * ( ) z d
39 Beispiel: 2 + x * (z - d) 2 + x * ( ) z d
40 Beispiel: 2 + x * (z - d) 2 + * x ( ) z d
41 Beispiel: 2 + x * (z - d) 2 + * x ( ) z d
42 Beispiel: 2 + x * (z - d) + 2 * x ( ) z d
43 Beispiel: 2 + x * (z - d) + 2 * x ( ) z d
44 Beispiel: 2 + x * (z - d) + 2 * x ( ) z d
45 Beispiel: 2 + x * (z - d) + 2 * x ( ) z d x -3 d 7 z 5
46 Beispiel: 2 + x * (z - d) + 2 * x ( ) z d x -3 d 7 z 5
47 Beispiel: 2 + x * (z - d) 2, int + 2 * x ( ) z d x -3 d 7 z 5
48 Beispiel: 2 + x * (z - d) 2, int + 2 * x ( ) z d x -3 d 7 z 5
49 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) z d x -3 d 7 z 5
50 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) z d x -3 d 7 z 5
51 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z d x -3 d 7 z 5
52 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z d x -3 d 7 z 5
53 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z 7, int d x -3 d 7 z 5
54 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z 7, int d x -3 d 7 z 5
55 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
56 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
57 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int -2, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
58 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int -2, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
59 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int 6, int -2, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
60 Beispiel: 2 + x * (z - d) 2, int + 2 * -3, int 6, int -2, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
61 Beispiel: 2 + x * (z - d) 2, int 8, int + 2 * -3, int 6, int -2, int x ( ) 5, int z -2, int 7, int d x -3 d 7 z 5
62 Beispiel: a = b = c = d = 0 a = b = c = d = 0
63 Beispiel: a = b = c = d = 0 a = b = c = d = 0
64 Beispiel: a = b = c = d = 0 a = b = c = d = 0
65 Beispiel: a = b = c = d = 0 a = b = c = = d 0
66 Beispiel: a = b = c = d = 0 a = b = c = = d 0
67 Beispiel: a = b = c = d = 0 a = b = = c = d 0
68 Beispiel: a = b = c = d = 0 a = b = = c = d 0
69 Beispiel: a = b = c = d = 0 a = = b = c = d 0
70 Beispiel: a = b = c = d = 0 a = = b = c = d 0
71 Beispiel: a = b = c = d = 0 = a = b = c = d 0
72 Beispiel: a = b = c = d = 0 = a = b = c = d 0 a -3 b 7 c 5 d 2
73 Beispiel: a = b = c = d = 0 = a = b = c = d 0 a -3 b 7 c 5 d 2
74 Beispiel: a = b = c = d = 0-3, int = a = b = c = d 0 a -3 b 7 c 5 d 2
75 Beispiel: a = b = c = d = 0-3, int = a = b = c = d 0 a -3 b 7 c 5 d 2
76 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = c = d 0 a -3 b 7 c 5 d 2
77 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = c = d 0 a -3 b 7 c 5 d 2
78 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = d 0 a -3 b 7 c 5 d 2
79 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = d 0 a -3 b 7 c 5 d 2
80 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int d 0 a -3 b 7 c 5 d 2
81 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int d 0 a -3 b 7 c 5 d 2
82 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int 0, int d 0 a -3 b 7 c 5 d 2
83 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int 0, int d 0 a -3 b 7 c 5 d 2
84 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int 0, int 0, int d 0 a -3 b 7 c 5 d 0
85 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int c = 2, int 0, int 0, int d 0 a -3 b 7 c 5 d 0
86 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int 0, int c = 2, int 0, int 0, int d 0 a -3 b 7 c 0 d 0
87 Beispiel: a = b = c = d = 0-3, int = a = 7, int b = 5, int 0, int c = 2, int 0, int 0, int d 0 a -3 b 7 c 0 d 0
88 Beispiel: a = b = c = d = 0-3, int = a = 7, int 0, int b = 5, int 0, int c = 2, int 0, int 0, int d 0 a -3 b 0 c 0 d 0
89 Beispiel: a = b = c = d = 0-3, int = a = 7, int 0, int b = 5, int 0, int c = 2, int 0, int 0, int d 0 a -3 b 0 c 0 d 0
90 Beispiel: a = b = c = d = 0-3, int 0, int = a = 7, int 0, int b = 5, int 0, int c = 2, int 0, int 0, int d 0 a 0 b 0 c 0 d 0
91 Beispiel: a!= 0 && b/a < 10 a!= 0 && b / a < 10
92 Beispiel: a!= 0 && b/a < 10 a!= 0 && b / a < 10
93 Beispiel: a!= 0 && b/a < 10 a!= 0 && b / a < 10
94 Beispiel: a!= 0 && b/a < 10 a!= 0 && / < 10 b a
95 Beispiel: a!= 0 && b/a < 10 a!= 0 && / < 10 b a
96 Beispiel: a!= 0 && b/a < 10 a!= 0 && < / 10 b a
97 Beispiel: a!= 0 && b/a < 10 a!= 0 && < / 10 b a
98 Beispiel: a!= 0 && b/a < 10!= && < a 0 / 10 b a
99 Beispiel: a!= 0 && b/a < 10!= && < a 0 / 10 b a
100 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 / 10 b a
101 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 / 10 b a a 0 b 4
102 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 / 10 b a a 0 b 4
103 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 0, int b / a 10 a 0 b 4
104 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 0, int b / a 10 a 0 b 4
105 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 0, int 0, int b / a 10 a 0 b 4
106 Beispiel: a!= 0 && b/a < 10 &&!= < a 0 0, int 0, int b / a 10 a 0 b 4
107 Beispiel: a!= 0 && b/a < 10 false, boolean!= && < a 0 0, int 0, int b / a 10 a 0 b 4
108 Beispiel: a!= 0 && b/a < 10 false, boolean!= && < a 0 0, int 0, int b / a 10 a 0 b 4
109 Beispiel: a!= 0 && b/a < 10 false, boolean!= false, boolean && < a 0 0, int 0, int b / a 10 a 0 b 4
110 Beispiel: y = x + ++x y = x + ++ x
111 Beispiel: y = x + ++x y = x + ++ x
112 Beispiel: y = x + ++x y = x + ++ x
113 Beispiel: y = x + ++x y = x + ++ x
114 Beispiel: y = x + ++x y = x + ++ x
115 Beispiel: y = x + ++x y = + x ++ x
116 Beispiel: y = x + ++x y = + x ++ x
117 Beispiel: y = x + ++x = y + x ++ x
118 Beispiel: y = x + ++x = y + x ++ x x 4 y 0
119 Beispiel: y = x + ++x = y + x ++ x x 4 y 0
120 Beispiel: y = x + ++x = y + 0, int x ++ x x 4 y 0
121 Beispiel: y = x + ++x = y + 0, int x ++ x x 4 y 0
122 Beispiel: y = x + ++x = y + 0, int x ++ 4, int x x 4 y 0
123 Beispiel: y = x + ++x = y + 0, int x ++ 4, int x x 4 y 0
124 Beispiel: y = x + ++x = y + 0, int x ++ 4, int x 4, int x 4 y 0
125 Beispiel: y = x + ++x = y + 0, int x ++ 4, int x 4, int x 4 y 0
126 Beispiel: y = x + ++x = y + 0, int x ++ 4, int 5, int x 4, int x 5 y 0
127 Beispiel: y = x + ++x = y + 0, int x ++ 4, int 5, int x 4, int x 5 y 0
128 Beispiel: y = x + ++x = y + 0, int x ++ 4, int 9, int 5, int x 4, int x 5 y 0
129 Beispiel: y = x + ++x = y + 0, int x ++ 4, int 9, int 5, int x 4, int x 5 y 0
130 Beispiel: y = x + ++x = y + 0, int 9, int x ++ 4, int 9, int 5, int x 4, int x 5 y 9
131 Beispiel: y = x++ + x y = x ++ + x
132 Beispiel: y = x++ + x y = x ++ + x
133 Beispiel: y = x++ + x y = x ++ + x
134 Beispiel: y = x++ + x y = ++ + x x
135 Beispiel: y = x++ + x y = ++ + x x
136 Beispiel: y = x++ + x y = + ++ x x
137 Beispiel: y = x++ + x y = + ++ x x
138 Beispiel: y = x++ + x = y + ++ x x
139 Beispiel: y = x++ + x = y + ++ x x x 4 y 0
140 Beispiel: y = x++ + x = y + ++ x x x 4 y 0
141 Beispiel: y = x++ + x = y + 0, int ++ x x x 4 y 0
142 Beispiel: y = x++ + x = y + 0, int ++ x x x 4 y 0
143 Beispiel: y = x++ + x = y + 0, int ++ x x 4, int x 4 y 0
144 Beispiel: y = x++ + x = y + 0, int ++ x x 4, int x 4 y 0
145 Beispiel: y = x++ + x = y + 0, int 4, int ++ x x 4, int x 5 y 0
146 Beispiel: y = x++ + x = y + 0, int 4, int ++ x x 4, int x 5 y 0
147 Beispiel: y = x++ + x = y + 0, int x 4, int 4, int ++ x 5, int x 5 y 0
148 Beispiel: y = x++ + x = y + 0, int x 4, int 4, int ++ x 5, int x 5 y 0
149 Beispiel: y = x++ + x = y + 0, int x 4, int 4, int ++ 9, int x 5, int x 5 y 0
150 Beispiel: y = x++ + x = y + 0, int x 4, int 4, int ++ 9, int x 5, int x 5 y 0
151 Beispiel: y = x++ + x = y + 0, int 9, int x 4, int 4, int ++ 9, int x 5, int x 5 y 9
152 Beispiel: y = x++ + x = y + 0, int 9, int x 4, int 4, int ++ 9, int x 5, int x 5 y 9
153 Impliziter Typecast Wenn ein Ausdruck vom TypA an einer Stelle verwendet wird, wo ein Ausdruck vom TypB erforderlich ist, wird entweder der Ausdruck vom TypA in einen Ausdruck vom TypB gecasted (impliziter Typecast), oder ein Compilerfehler erzeugt, falls dieser Cast nicht (automatisch) erlaubt ist. Beispiel: Zuweisung long x = 5; i n t y = 3; x = y ; // impliziter Cast von i n t nach long
154 Erlaubte Implizite Typecasts Numerische Typen double float Gleitkommazahlen long short int char ganze Zahlen byte Konvertierung von long nach double oder von int nach float kann Information verlieren wird aber automatisch durchgeführt.
155 Welcher Typ wird benötigt? Operatoren sind üblicherweise überladen, d.h. ein Symbol (+, -,... ) steht in Abhängigkeit der Parameter (Argumente) für unterschiedliche Funktionen. + : int int + : long long + : float float + : double double + : int int int + : long long long + : float float float + : double double double + : String String String Der Compiler muss in der Lage sein während der Compilierung die richtige Funktion zu bestimmen.
156 Impliziter Typecast Der Compiler wertet nur die Typen des Ausdrucksbaums aus. Für jeden inneren Knoten wählt er dann die geeignete Funktion (z.b. + : long long long) falls ein +-Knoten zwei long-argumente erhält. Falls keine passende Funktion gefunden wird, versucht der Compiler durch implizite Typecasts die Operanden an eine Funktion anzupassen. Dies geschieht auch für selbstgeschriebene Funktionen (z.b. min(int a, int b) und min(long a, long b)). Der Compiler nimmt die Funktion mit der speziellsten Signatur.
157 Speziellste Signatur 5.3 Auswertung von Ausdrücken Harald Räcke 101/656
158 Ordnungsrelationen Relation : TypA TypB falls TypA nach TypB (implizit) gecasted werden kann: reflexiv: T T transitiv: T 1 T 2 T 2 T 3 T 1 T 3 antisymmetrisch: T 1 T 2 T 2 T 1 T 1 = T 2 d.h., definiert Halbordnung auf der Menge der Typen. Relation k : (T 1,..., T k ) k (T 1,..., T k ) falls T i T i i {1,..., k}. reflexiv: T k T für alle transitiv: T 1 k T 2 T 2 k T 3 T 1 k T 3 antisymmetrisch: T 1 k T 2 T 2 k T 1 T 1 = T 2 d.h., k definiert Halbordnung auf der Menge der k-tupel von Typen.
159 Ordnungsrelationen Relation : TypA TypB falls TypA nach TypB (implizit) gecasted werden kann: reflexiv: T T transitiv: T 1 T 2 T 2 T 3 T 1 T 3 antisymmetrisch: T 1 T 2 T 2 T 1 T 1 = T 2 d.h., definiert Halbordnung auf der Menge der Typen. Relation k : (T 1,..., T k ) k (T 1,..., T k ) falls T i T i i {1,..., k}. reflexiv: T k T für alle transitiv: T 1 k T 2 T 2 k T 3 T 1 k T 3 antisymmetrisch: T 1 k T 2 T 2 k T 1 T 1 = T 2 d.h., k definiert Halbordnung auf der Menge der k-tupel von Typen.
160 R 1 f (T 1 ) R 2 f (T 2 ). R l f (T l ) f T 1 T 2... T k 1 T k T 1,..., T l sind k-tupel von Typen für die eine Definition von f existiert. T = (T 1,..., T k ) ist das k-tupel von Typen mit dem f aufgerufen wird. Menge aller möglichen Funktionen/Tupel: M := {T i T k T i }. Wähle kleinstes Element aus M falls M ein eindeutig kleinstes Element besitzt (sonst Compilerfehler).
161 R 1 f (T 1 ) R 2 f (T 2 ). R l f (T l ) f T 1 T 2... T k 1 T k T 1,..., T l sind k-tupel von Typen für die eine Definition von f existiert. T = (T 1,..., T k ) ist das k-tupel von Typen mit dem f aufgerufen wird. Menge aller möglichen Funktionen/Tupel: M := {T i T k T i }. Wähle kleinstes Element aus M falls M ein eindeutig kleinstes Element besitzt (sonst Compilerfehler).
162 R 1 f (T 1 ) R 2 f (T 2 ). R l f (T l ) f T 1 T 2... T k 1 T k T 1,..., T l sind k-tupel von Typen für die eine Definition von f existiert. T = (T 1,..., T k ) ist das k-tupel von Typen mit dem f aufgerufen wird. Menge aller möglichen Funktionen/Tupel: M := {T i T k T i }. Wähle kleinstes Element aus M falls M ein eindeutig kleinstes Element besitzt (sonst Compilerfehler).
163 Impliziter Typecast Numerische Typen Angenommen wir haben Funktionen int min(int a, int b) float min(float a, float b) double min(double a, double b) definiert. 1 long a = 7, b = 3; 2 double d = min(a, b); würde die Funktion float min(float a, float b) aufrufen. 5.3 Auswertung von Ausdrücken Harald Räcke 104/656
164 Impliziter Typecast Bei Ausdrücken mit Seiteneffekten (Zuweisungen, ++, - -) gelten andere Regeln: Beispiel: Zuweisungen = : byte byte byte = : char char char = : short short short = : int int int = : long long long = : float float float = : double double double Es wird nur der Parameter konvertiert, der nicht dem Seiteneffekt unterliegt. 5.3 Auswertung von Ausdrücken Harald Räcke 105/656
165 5.3 Auswertung von Ausdrücken Der Funktionsaufrufoperator: symbol name types L/R level ( ) Funktionsaufruf Funktionsname, * links Auswertung von Ausdrücken Harald Räcke 106/656
166 Beispiel: x = min(a, min(a,b) + 4L) x = min ( a, min ( a, b ) + 4L )
167 Beispiel: x = min(a, min(a,b) + 4L) x = min ( a, min ( a, b ) + 4L )
168 Beispiel: x = min(a, min(a,b) + 4L) x = min ( a, min ( a, b ) + 4L )
169 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a min ( a, b ) + 4L
170 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a min ( a, b ) + 4L
171 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a ( ) + 4L min a b
172 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a ( ) + 4L min a b
173 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a + ( ) 4L min a b
174 Beispiel: x = min(a, min(a,b) + 4L) x = ( ) min a + ( ) 4L min a b
175 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) min a + ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
176 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) min a + ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
177 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a + ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
178 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a + ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
179 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
180 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
181 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
182 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
183 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
184 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
185 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list 3, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
186 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list 3, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
187 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list 3, int 5, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
188 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) 4L min a b, function list 3, int 5, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
189 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int 3, int ( ) 4L min a b, function list 3, int 5, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
190 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int 3, int ( ) 4L min a b, function list 3, int 5, int int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
191 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) min a b, function list 3, int 3, int 5, int 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
192 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) min a b, function list 3, int 3, int 5, int 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
193 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) min a b, function list 3, int 3, int long 5, int 7, long 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
194 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int ( ) min a b, function list 3, int 3, int long 5, int 7, long 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
195 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int float 3.0, float ( ) min a b, function list 3, int 3, int float long 5, int 7, long 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
196 Beispiel: x = min(a, min(a,b) + 4L) = x ( ) 7, long min a +, function list 3, int float 3.0, float ( ) min a b, function list 3, int 3, int float long 5, int 7, long 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
197 Beispiel: x = min(a, min(a,b) + 4L) float is not casted to long ERROR = x ( ) 7, long min a +, function list 3, int float 3.0, float ( ) min a b, function list 3, int 3, int float long 5, int 7, long 4L 4, long int min(int,int) float min(float,float) double min(double,double) long x 7 int a 3 int b 5
198 Impliziter Typecast Strings Spezialfall Falls beim Operator + ein Typ vom Typ String ist, wird der andere auch in einen String umgewandelt. Stringkonkatenation. Jeder Typ in Java besitzt eine Stringrepresentation. Funktioniert nicht bei selbstgeschriebenen Funktionen. 5.3 Auswertung von Ausdrücken Harald Räcke 108/656
199 Beispiel: s = a + b s = a + b
200 Beispiel: s = a + b s = a + b
201 Beispiel: s = a + b s = a + b
202 Beispiel: s = a + b s = + a b
203 Beispiel: s = a + b s = + a b
204 Beispiel: s = a + b = s + a b
205 Beispiel: s = a + b = s + a b String s "Hallo" a 2 b 6
206 Beispiel: s = a + b = s + a b String s "Hallo" a 2 b 6
207 Beispiel: s = a + b = s + "Hallo", String a b String s "Hallo" a 2 b 6
208 Beispiel: s = a + b = s + "Hallo", String a b String s "Hallo" a 2 b 6
209 Beispiel: s = a + b = s + "Hallo", String a 2, int b String s "Hallo" a 2 b 6
210 Beispiel: s = a + b = s + "Hallo", String a 2, int b String s "Hallo" a 2 b 6
211 Beispiel: s = a + b = s + "Hallo", String a 2, int b 6, int String s "Hallo" a 2 b 6
212 Beispiel: s = a + b = s + "Hallo", String a 2, int b 6, int String s "Hallo" a 2 b 6
213 Beispiel: s = a + b = s + "Hallo", String a 2, int 8, int b 6, int String s "Hallo" a 2 b 6
214 Beispiel: s = a + b = s + "Hallo", String a 2, int 8, int b 6, int String s "Hallo" a 2 b 6
215 Beispiel: s = a + b int is not casted to String ERROR = s + "Hallo", String a 2, int 8, int b 6, int String s "Hallo" a 2 b 6
216 Beispiel: s = "" + a + b s = "" + a + b
217 Beispiel: s = "" + a + b s = "" + a + b
218 Beispiel: s = "" + a + b s = "" + a + b
219 Beispiel: s = "" + a + b s = + + b "" a
220 Beispiel: s = "" + a + b s = + + b "" a
221 Beispiel: s = "" + a + b s = + + b "" a
222 Beispiel: s = "" + a + b s = + + b "" a
223 Beispiel: s = "" + a + b = s + + b "" a String s "Hallo" a 2 b 6
224 Beispiel: s = "" + a + b = s + + b "" a String s "Hallo" a 2 b 6
225 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a String s "Hallo" a 2 b 6
226 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a String s "Hallo" a 2 b 6
227 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a "", String String s "Hallo" a 2 b 6
228 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a "", String String s "Hallo" a 2 b 6
229 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a "", String 2, int String s "Hallo" a 2 b 6
230 Beispiel: s = "" + a + b = s + "Hallo", String + b "" a "", String 2, int String s "Hallo" a 2 b 6
231 Beispiel: s = "" + a + b = s + "Hallo", String "2", String + String b "" a "", String 2, int String s "Hallo" a 2 b 6
232 Beispiel: s = "" + a + b = s + "Hallo", String "2", String + String b "" a "", String 2, int String s "Hallo" a 2 b 6
233 Beispiel: s = "" + a + b = s + "Hallo", String + "" a "", String "2", String String 2, int b 6, int String s "Hallo" a 2 b 6
234 Beispiel: s = "" + a + b = s + "Hallo", String + "" a "", String "2", String String 2, int b 6, int String s "Hallo" a 2 b 6
235 Beispiel: s = "" + a + b = s + "Hallo", String + "" a "", String "2", String String "26", String 2, int String b 6, int String s "Hallo" a 2 b 6
236 Beispiel: s = "" + a + b = s + "Hallo", String + "" a "", String "2", String String "26", String 2, int String b 6, int String s "Hallo" a 2 b 6
237 Beispiel: s = "" + a + b = s + "Hallo", String "26" "26", String + "" a "", String "2", String String "26", String 2, int String b 6, int String s "Hallo" a 2 b 6
238 Beispiel: s = s + 1 s = s + 1
239 Beispiel: s = s + 1 s = s + 1
240 Beispiel: s = s + 1 s = s + 1
241 Beispiel: s = s + 1 s = + s 1
242 Beispiel: s = s + 1 s = + s 1
243 Beispiel: s = s + 1 = s + s 1
244 Beispiel: s = s + 1 = s + s 1 short s 4
245 Beispiel: s = s + 1 = s + s 1 short s 4
246 Beispiel: s = s + 1 = s + 4, short s 1 short s 4
247 Beispiel: s = s + 1 = s + 4, short s 1 short s 4
248 Beispiel: s = s + 1 = s + 4, short s 1 4, short short s 4
249 Beispiel: s = s + 1 = s + 4, short s 1 4, short short s 4
250 Beispiel: s = s + 1 = s + 4, short s 1 4, short 1, int short s 4
251 Beispiel: s = s + 1 = s + 4, short s 1 4, short 1, int short s 4
252 Beispiel: s = s + 1 = s + 4, short int s 1 4, short 5, int 1, int short s 4
253 Beispiel: s = s + 1 = s + 4, short int s 1 4, short 5, int 1, int short s 4
254 Beispiel: s = s + 1 int is not casted to short ERROR = s + 4, short int s 1 4, short 5, int 1, int short s 4
255 Beispiel: s = s + 1 int is not casted to short ERROR = s + 4, short int s 1 4, short 5, int 1, int short s 4
256 Beispiel: s = s = 7 + 1
257 Beispiel: s = s = 7 + 1
258 Beispiel: s = s = 7 + 1
259 Beispiel: s = s = + 7 1
260 Beispiel: s = s = + 7 1
261 Beispiel: s = = s + 7 1
262 Beispiel: s = = s short s 4
263 Beispiel: s = = s short s 4
264 Beispiel: s = = s + 4, short 7 1 short s 4
265 Beispiel: s = = s + 4, short 7 1 short s 4
266 Beispiel: s = = s + 4, short 7 1 7, int short s 4
267 Beispiel: s = = s + 4, short 7 1 7, int short s 4
268 Beispiel: s = = s + 4, short 7 1 7, int 1, int short s 4
269 Beispiel: s = = s + 4, short 7 1 7, int 1, int short s 4
270 Beispiel: s = = s + 4, short 7 1 7, int 8, int 1, int short s 4
271 Beispiel: s = = s + 4, short 7 1 7, int 8, int 1, int short s 4
272 Beispiel: s = = s + 4, short 8, short 7 1 7, int 8, int 1, int short s 8
273 Beispiel: s = = s + 4, short 8, short 7 1 7, int 8, int compile-time constant expression 1, int short s 8
274 Expliziter Typecast symbol name type L/R level (type) typecast zahl, char rechts 3 Beispiele mit Datenverlust short s = ( short ) ; Die obersten bits werden einfach weggeworfen... double d = 1. 5; short s = ( short ) d ; d hat danach den Wert 1....ohne Datenverlust: i n t x = 5; short s = ( short ) x ;
275 5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: Arrays Harald Räcke 114/656
276 Beispiel 1 i n t [ ] a ; // Deklaration 2 i n t n = read ( ) ; 3 4 a = new i n t [ n ] ; // Anlegen des Felds 5 i n t i = 0; 6 while ( i < n ) { 7 a [ i ] = read ( ) ; 8 i = i +1; 9 } Einlesen eines Feldes 5.4 Arrays Harald Räcke 115/656
277 Beispiel type[] name; deklariert eine Variable für ein Feld (array), dessen Elemente vom Typ type sind. Alternative Schreibweise: type name[]; Das Kommando new legt ein Feld einer gegebenen Größe an und liefert einen Verweis darauf zurück: a a = new int[6]; a Arrays Harald Räcke 116/656
278 Was ist eine Referenz? Eine Referenziable speichert eine Adresse; an dieser Adresse liegt der eigentliche Inhalt der Variablen. a: Adresse Inhalt C a A Wir können die Referenz nicht direkt manipulieren (nur über den new-operator, oder indem wir eine andere Referenz zuweisen) B C D E F
279 5.4 Arrays Der Wert einer Feld-Variable ist also ein Verweis!!! int[] b = a; kopiert den Verweis der Variablen a in die Variable b: a int[] b = a; a b Alle nichtprimitive Datentypen sind Referenzentypen, d.h., die zugehörige Variable speichert einen Verweis!!! 5.4 Arrays Harald Räcke 118/656
280 5.4 Arrays Die Elemente eines Feldes sind von 0 an durchnummeriert. Die Anzahl der Elemente des Feldes name ist name.length. Auf das i-te Element greift man mit name[i] zu. Bei jedem Zugriff wird überprüft, ob der Index erlaubt ist, d.h. im Interl {0,..., name.length-1} liegt. Liegt der Index außerhalb des Interls, wird eine ArrayIndexOutOfBoundException ausgelöst ( Exceptions). 5.4 Arrays Harald Räcke 119/656
281 Mehrdimensionale Felder Java unterstützt direkt nur eindimensionale Felder. ein zweidimensionales Feld ist ein Feld von Feldern... a a = new int[5][6]; a
282 Der new-operator symbol name types L/R level new new Typ, Konstruktor links 1 Erzeugt ein Objekt/Array und liefert eine Referenz darauf zurück. 1. Version: Erzeugung eines Arrays (Typ ist Arraytyp) new int[3][7]; oder auch new int[3][]; (ein Array, das 3 Verweise auf int enthält) new String[10]; new int[]{1,2,3,}; (ein Array mit den ints 1, 2, 3) 2. Version: Erzeugung eines Objekts durch Aufruf eines Konstruktors String s = new String("Hello World!");
283 Der Index-Operator symbol name types L/R level [] index array, int links 1 Zugriff auf ein Arrayelement. 5.4 Arrays Harald Räcke 122/656
284 Beispiel: x = a[3][2] x = a [ 3 ] [ 2 ]
285 Beispiel: x = a[3][2] x = a [ 3 ] [ 2 ]
286 Beispiel: x = a[3][2] x = a [ 3 ] [ 2 ]
287 Beispiel: x = a[3][2] x = [ ] [ 2 ] a 3
288 Beispiel: x = a[3][2] x = [ ] [ 2 ] a 3
289 Beispiel: x = a[3][2] x = [ ] [ ] 2 a 3
290 Beispiel: x = a[3][2] x = [ ] [ ] 2 a 3
291 Beispiel: x = a[3][2] = x [ ] [ ] 2 a 3
292 Beispiel: x = a[3][2] = x [ ] [ ] 2 a 3 x 2 a
293 Beispiel: x = a[3][2] = x [ ] [ ] 2 a 3 x 2 a
294 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3 x 2 a
295 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3 x 2 a
296 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3, int[][] x 2 a
297 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3, int[][] x 2 a
298 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3, int[][] 3, int x 2 a
299 Beispiel: x = a[3][2] = x [ ] 2, int [ ] 2 a 3, int[][] 3, int x 2 a
300 Beispiel: x = a[3][2] = x [ ] 2, int, int[] [ ] 2 a 3, int[][] 3, int x 2 a
301 Beispiel: x = a[3][2] = x [ ] 2, int, int[] [ ] 2 a 3, int[][] 3, int x 2 a
302 Beispiel: x = a[3][2] = x [ ] 2, int [ ] a 3, int[][], int[] 3, int 2 2, int x 2 a
303 Beispiel: x = a[3][2] = x [ ] 2, int [ ] a 3, int[][], int[] 3, int 2 2, int x 2 a
304 Beispiel: x = a[3][2] = x [ ] 2, int [ ] a 3, int[][], int[] 3, int 6, int 2 2, int x 2 a
305 Beispiel: x = a[3][2] = x [ ] 2, int [ ] a 3, int[][], int[] 3, int 6, int 2 2, int x 2 a
306 Beispiel: x = a[3][2] = x [ ] 2, int [ ] a 3, int[][] 6, int, int[] 3, int 6, int 2 2, int x 6 a
307 Der. -Operator symbol name types L/R level. member access Array/Objekt/Class, Member links 1 Zugriff auf Member. Beispiel: x = new int[2][4].length x hat dann den Wert Arrays Harald Räcke 124/656
308 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema: new int [ 2 ] [ 4 ]. length
309 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema: new int [ 2 ] [ 4 ]. length
310 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema: new int [ 2 ] [ 4 ]. length
311 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema: new. length int int[2][4] [ 2 ] [ 4 ]
312 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema: new. length int int[2][4] [ 2 ] [ 4 ]
313 Beispiel: new int[2][4].length Das Parsing für den new-operator passt nicht in das Schema:. new length int int[2][4] [ 2 ] [ 4 ]
314 Arrayinitialisierung 1. int[] a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3; 2. int[] a = new int[]{ 1, 2, 3}; 3. int[] a = new int[3]{ 1, 2, 3}; 4. int[] a = { 1, 2, 3}; 5. char[][] b = { { a, b }, new char[3], {} }; 6. char[][] b; b = new char[][]{ { a, b }, new char[3], {} }; 7. char[][] b; b = { { a, b }, new char[3], {} }; 5.4 Arrays Harald Räcke 126/656
315 5.5 Mehr Kontrollstrukturen Typische Form der Iteration über Felder: Initialisierung des Laufindex; while-schleife mit Eintrittsbedingung für den Rumpf; Modifizierung des Laufindex am Ende des Rumpfs. 5.5 Mehr Kontrollstrukturen Harald Räcke 127/656
316 Beispiel 1 i n t result = a [ 0 ] ; 2 i n t i = 1; // I n i t i a l i s i e r u n g 3 while ( i < a. length ) { 4 i f ( a [ i ] < result ) 5 result = a [ i ] ; 6 i = i +1; // Modifizierung 7 } 8 write ( result ) ; Bestimmung des Minimums 5.5 Mehr Kontrollstrukturen Harald Räcke 128/656
317 Das For-Statement 1 i n t result = a [ 0 ] ; 2 for ( i n t i = 1; i < a. length ; ++ i ) 3 i f ( a [ i ] < result ) 4 result = a [ i ] ; 5 write ( result ) ; Bestimmung des Minimums 5.5 Mehr Kontrollstrukturen Harald Räcke 129/656
318 Das For-Statement for ( i n i t, cond, modify ) stmt entspricht: { i n i t ; while ( cond ) { stmt modify ; } } Erläuterungen: ++i; ist äquient zu i = i + 1; die while-schleife steht innerhalb eines Blocks ({...}) die Variable i ist außerhalb dieses Blocks nicht sichtbar/zugreifbar 5.5 Mehr Kontrollstrukturen Harald Räcke 130/656
319 5.6 Funktionen und Prozeduren Oft möchte man: Teilprobleme separat lösen; und dann die Lösung mehrfach verwenden. 5.6 Funktionen und Prozeduren Harald Räcke 131/656
320 Beispiel public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes
321 Beispiel Type des Rückgabewertes public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes
322 Beispiel Funktionsname Type des Rückgabewertes public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes
323 Beispiel Funktionsname Type des Rückgabewertes Liste der formalen Parameter public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes
324 Beispiel Funktionsname Type des Rückgabewertes Liste der formalen Parameter public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes Funktionsrumpf
325 Beispiel Funktionsname Type des Rückgabewertes Liste der formalen Parameter public s t a t i c i n t [ ] readarray ( i n t number) { // number = Anzahl zu lesender Elemente i n t [ ] result = new i n t [number ] ; // Feld anlegen for ( i n t i = 0; i < number; ++ i ) { result [ i ] = read ( ) ; } return result ; } Einlesen eines Feldes Rückgabe des Ergebnisses + Beenden der Funktion Funktionsrumpf
326 5.6 Funktionen und Prozeduren Erläuterungen: Die erste Zeile ist der Header der Funktion. public, und static komen später int[] gibt den Typ des Rückgabe-Werts an. readarray ist der Name, mit dem die Funktion aufgerufen wird. Dann folgt (in runden Klammern und komma-separiert) die Liste der formalen Parameter, hier: (int number). Der Rumpf der Funktion steht in geschweiften Klammern. return expr; beendet die Ausführung der Funktion und liefert den Wert von expr zurück. 5.6 Funktionen und Prozeduren Harald Räcke 133/656
327 5.6 Funktionen und Prozeduren Erläuterungen: Die Variablen, die innerhalb eines Blocks angelegt werden, d.h. innerhalb von { und }, sind nur innerhalb dieses Blocks sichtbar, d.h. benutzbar (lokale Variablen). Der Rumpf einer Funktion ist ein Block. Die formalen Parameter können auch als lokale Variablen aufgefasst werden. Bei dem Aufruf readarray(7) erhält der formale Parameter number den Wert 7 (aktueller Parameter). 5.6 Funktionen und Prozeduren Harald Räcke 134/656
328 Beispiel public s t a t i c i n t min ( i n t [ ] b) { i n t result = b [ 0 ] ; for ( i n t i = 1; i < b. length ; ++ i ) { i f (b[ i ] < result ) result = b[ i ] ; } return result ; } Bestimmung des Minimums 5.6 Funktionen und Prozeduren Harald Räcke 135/656
329 Beispiel public class Min extends MiniJava { public s t a t i c i n t [ ] readarray ( i n t number) {... } public s t a t i c i n t min ( i n t [ ] b) {... } // J e t z t kommt das Hauptprogramm public s t a t i c void main ( String [ ] args ) { i n t n = read ( ) ; i n t [ ] a = readarray ( n ) ; i n t result = min ( a ) ; write ( result ) ; } // end of main ( ) } // end of class Min Programm zur Minimumsberechnung 5.6 Funktionen und Prozeduren Harald Räcke 136/656
330 Beispiel Erläuterungen: Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args von String-Elementen. In diesem Argument-Feld werden dem Programm Kommandozeilen-Argumente verfügbar gemacht. public class Test extends MiniJava { public s t a t i c void main ( String [ ] args ) { write ( args [0]+ args [ 1 ] ) ; } } // end of class Test 5.6 Funktionen und Prozeduren Harald Räcke 137/656
331 Beispiel Der Aufruf java Test "Hel" "lo World!" liefert: Hello World! 5.6 Funktionen und Prozeduren Harald Räcke 138/656
332 5.6 Funktionen und Prozeduren Um die Arbeitsweise von Funktionen zu veranschaulichen erweitern/modifizieren wir die Kontrollflussdiagramme f(x,y) x=f(7,z) return 42 Startknoten der Funktion f Funktionsaufruf Endknoten Für jede Funktion wird ein eigenes Teildiagramm erstellt. Ein Aufrufknoten repäsentiert eine Teilberechnung der aufgerufenen Funktion. 5.6 Funktionen und Prozeduren Harald Räcke 139/656
333 5.6 Funktionen und Prozeduren Teildiagramm der Funktion min(): min(b) result=b[0] i=1 no i<b.length yes return result no b[i]<result yes result=b[i] i=i+1
334 5.6 Funktionen und Prozeduren min(b) readarray(number) main(args) n=read() return result; return result; a=readarray(n) result=min(a) write(result) return 5.6 Funktionen und Prozeduren Harald Räcke 141/656
335 5.6 Funktionen und Prozeduren Aufruf min(b) readarray(number) main(args) n=read() return result; return result; Rückkehr a=readarray(n) result=min(a) write(result) return 5.6 Funktionen und Prozeduren Harald Räcke 141/656
336 5.6 Funktionen und Prozeduren Aufruf min(b) readarray(number) main(args) n=read() return result; return result; a=readarray(n) result=min(a) write(result) Rückkehr return 5.6 Funktionen und Prozeduren Harald Räcke 141/656
4 Kontrollfluss-Diagramme
4 Kontrollfluss-Diagramme In welcher Weise die Operationen eines Programms nacheinander ausgeführt werden, läßt sich anschaulich mithilfe von Kontrollfluss-Diagrammen darstellen. Ingredienzien: Start Stop
MehrBeispiel Statische Typisierung. 5 Mehr Java. Primitive Datentypen Ganze Zahlen. 5.1 Basistypen
5 Mehr Java Beispiel Statische Typisierung Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben ein Datentyp, der schon bei der Kompilierung festgelegt wird. Java unterscheidet
MehrBeispiel: Start. Stop
Achtung: Zu jedem MiniJava-Programm lässt sich ein Kontrollfluss-Diagramm konstruieren :-) die umgekehrte Richtung gilt zwar ebenfalls, liegt aber nicht so auf der Hand. 107 Beispiel: Start no yes no yes
MehrEinführung in die Informatik 1
WS 2016/17 Einführung in die Informatik 1 Harald Räcke Fakultät für Informatik TU München http://www14.in.tum.de/lehre/2016ws/info1/ Wintersemester 2016/17 Harald Räcke 1 Diese Vorlesungsfolien basieren
MehrAlgorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
MehrJava Einführung VARIABLEN und DATENTYPEN Kapitel 2
Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen
MehrKapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08
Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für
MehrProgrammiertechnik Operatoren, Kommentare, Ein-/Ausgabe
Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Was sind Operatoren? Ein Operator ist eine in die Programmiersprache eingebaute Funktion,
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Vordefinierte Datentypen Übersicht 1 Ganzzahlige Typen 2 Boolscher Typ 3 Gleitkommatypen 4 Referenztypen 5 void Typ 6 Implizite und explizite Typumwandlungen Ganzzahlige Typen Die
Mehr1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
MehrEinführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrEinführung in den Einsatz von Objekt-Orientierung mit C++ I
Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen
Mehr1 Programmiersprachen
1 Programmiersprachen Um einen Algorithmus in einer von einer Maschine ausführbaren Form beschreiben zu können, verwenden wir eine formale Sprache. formale Beschreibung des Aufbaus der Worte und Sätze,
MehrPrimitive Datentypen
Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.
MehrEinführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.
Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
MehrJAVA-Datentypen und deren Wertebereich
Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).
MehrVorkurs Informatik WiSe 16/17
Java Schleifen und Arrays Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 06.10.2016 Technische Universität Braunschweig, IPS Überblick Kommentare Typen Kontrollstrukturen Arrays 06.10.2016 Dr. Werner
MehrKapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz
Kapitel 05 Datentypen Inhalt des 5. Kapitels Datentypen 5.1 Einleitung 5.2 Eingebaute Datentypen Übersicht Die Datentypen char, float und double Standardwerte Operatoren Konversion / Type-Cast Datentyp
MehrScala: Klassen, Methoden und Objekte. von Simon Lerch
Scala: Klassen, Methoden und Objekte von Simon Lerch Überblick Methoden Klassen Objekte Basis Typen Prefixes Java's == vs. Scala's == Assoziativität von Operatoren Rich Wrapper 30.03.10 Klassen, Methoden
MehrProgrammieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
MehrUnterlagen. CPP-Uebungen-08/
Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen
MehrJava Einführung Operatoren Kapitel 2 und 3
Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig
MehrJava - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue
Java - Schleifen Bedingung wiederhole ja Anweisung Anweisung Anweisung Leibniz Universität IT Services Anja Aue Anweisung int zahl; zahl = 2; zahl = zahl * 10; int zahl; ; Jede Anweisung endet mit einem
MehrKontrollstrukturen, Pseudocode und Modulo-Rechnung
Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1
MehrC++ - Operatoren. Eigene Klassen mit neuen Funktionen
C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
Mehr1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
MehrDie einfachsten Anweisungen
2 Die einfachsten Anweisungen 2-1 Inhalt Die einfachsten Anweisungen Einführung Datentypen Arithmetische Operatoren Mathematische Funktionen Mehrfache Zuweisungen Übungsaufgaben Einführung Wir wollen unser
Mehr3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
MehrRO-Tutorien 3 / 6 / 12
RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft
MehrJavaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden
Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter
MehrOperatoren und Ausdrücke
Operatoren und Ausdrücke Thomas Röfer Operatoren Schreibweisen von Operatoren Arten von Operatoren Vorrang von Operatoren Typanalyse von Ausdrücken Rückblick Variablen, Konstanten und Referenzen Variablen/Konstanten
MehrModellierung und Programmierung
Modellierung und Programmierung Dr. Martin Riplinger 19.12.2012 IAM Institut für Angewandte Mathematik Funktionszeiger: Vorüberlegungen Funktionsaufrufe sind bis jetzt im Code mit Name explizit angegeben
MehrElementare Datentypen in C++
Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der
MehrPrimitive Datentypen und Felder (Arrays)
Primitive Datentypen und Felder (rrays) Primitive Datentypen Java stellt (genau wie Haskell) primitive Datentypen für Boolesche Werte, Zeichen, ganze Zahlen und Gleitkommazahlen zur Verfügung. Der wichtigste
Mehr2.5 Primitive Datentypen
2.5 Primitive Datentypen Wir unterscheiden 5 primitive Datentypen: ganze Zahlen -2, -1, -0, -1, -2,... reelle Zahlen 0.3, 0.3333..., π, 2.7 10 4 Zeichen a, b, c,... Zeichenreihen "Hello World", "TIFI",
MehrGliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik
Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.
Mehr5.4 Klassen und Objekte
5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable
1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem
MehrModul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016
MehrProgrammieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff
Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Textausgabe per printf Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. printf
MehrWie entwerfe ich ein Programm?
Wie entwerfe ich ein Programm? Welche Objekte brauche ich? Flussdiagramme für Programmablauf Vorcode Testcode Hauptcode Wir spielen Lotto! Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 5 +
MehrGrundlagen der Informatik 2. Operatoren
2. Operatoren Referenzen Typumwandlungen Vorrangregeln Kommentare Grundlagen der Informatik (Alex Rempel) 1 Ausdruck (z.b. "x = 34 + y;") Folge von Operatoren und Operanden Operatoren Arithmetische Operatoren
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Felder, mehrdimensional Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Überblick: mehrdimensionale Felder 2 Vereinbarung
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
MehrObjektorientierte Programmierung OOP Programmieren mit Java
4 Datenfelder, Parameterübergabe, Casting Objektorientierte Programmierung OOP Programmieren mit Java 4 Datenfelder, Parameterübergabe, Casting 4 Datenfelder, Parameterübergabe, Casting 4.1 Datenfelder
Mehr7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
Mehr4. Datentypen. Einleitung Eingebaute Datentypen. Konversion / Type-Cast. Operatoren. Übersicht Die Datentypen char, float und double Standardwerte
4. Datentypen Einleitung Eingebaute Datentypen Übersicht Die Datentypen char, float und double Standardwerte Konversion / Type-Cast Datentyp von Literalen Operatoren Ausdrücke Allgemeine Informatik 2 SS09
MehrModellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {
MehrKapitel 3. Grunddatentypen, Ausdrücke und Variable
Kapitel 3 Grunddatentypen, Ausdrücke und Variable Grunddatentypen, Ausdrücke und Variable 1 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen
MehrModul 122 VBA Scribt.docx
Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval
MehrPrinzipielle Ausführungsvarianten I
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Unser erstes Java Programm AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 39 Hello World!
MehrTutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2
Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen
MehrEin erstes Java-Programm
Ein erstes Java-Programm public class Rechnung { public static void main (String [] arguments) { int x, y; x = 10; y = -1 + 23 * 33 + 3 * 7 * (5 + 6); System.out.print ("Das Resultat ist "); System.out.println
MehrKapitel 3: Variablen
Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber
MehrVorlesung Programmieren
Vorlesung Programmieren 2. Typen und Variablen 27.10./03.11.2014 Prof. Dr. Ralf H. Reussner Version 1.2 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrGrundlagen der Programmierung Teil1 Einheit III Okt. 2010
Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den
MehrJava - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue
Java - Zahlen, Wahrheitswerte und Zeichen Leibniz Universität Anja Aue Kommentare Hilfe für den Entwickler. Wer hat wann welche Änderung vorgenommen? Warum werden diese Anweisungen hier ausgeführt? Bei
MehrDeklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
MehrProgrammieren in C / C++ Grundlagen C 2
Programmieren in C / C++ Grundlagen C 2 Hochschule Fulda FB AI Wintersemester 2016/17 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, FB AI Anweisung / Ausdruck 1 Programm setzt sich aus vielen Anweisungen
MehrJava Kurs für Anfänger Einheit 2 Datentypen und Operationen
Java Kurs für Anfänger Einheit 2 Datentypen und Operationen Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 16. Mai 2009 Inhaltsverzeichnis
MehrElementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
MehrVorlesung 6: Operatoren, Logische Ausdrücke
Vorlesung 6: Operatoren, Logische Ausdrücke Inhalt Organisatorisches Offene Übungen Operatoren Logische Ausdrücke Dr. J. Raimann 1 Offene Übungen (durch Tutoren betreut) montags 1. und 2. Block (8.15 Uhr
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
Mehr620.900 Propädeutikum zur Programmierung
620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Lösung der Aufgaben (1/2) Lösung Aufgabe
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrDer Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
MehrEinführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann
Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann 1 Einführung in die Informatik für Hörer aller Fakultäten II Andreas Podelski Stephan Diehl Uwe Waldmann
MehrJava - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue
Java - Zahlen, Wahrheitswerte und Zeichen Leibniz Universität IT Services Anja Aue Kommentare Hilfe für den Entwickler. Wer hat wann welche Änderung vorgenommen? Warum werden diese Anweisungen hier ausgeführt?
MehrNoch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean
01.11.05 1 Noch für heute: 01.11.05 3 primitie Datentypen in JAVA Primitie Datentypen Pseudocode Name Speichergröße Wertgrenzen boolean 1 Byte false true char 2 Byte 0 65535 byte 1 Byte 128 127 short 2
MehrEinstieg in die Informatik mit Java
1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrInformatik I - Einstiegskurs
Informatik I - Einstiegskurs Dr. Henrik Brosenne Georg-August-Universität Göttingen Institut für Informatik Basiert auf dem Einstiegskurs im Wintersemester 2009/10 von Markus Osterhoff Wintersemester 2012/13
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrProgrammieren in C++ Überladen von Methoden und Operatoren
Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrImperative Programmierung in Java. Algorithmen und Datenstrukturen II 1
Imperative Programmierung in Java Algorithmen und Datenstrukturen II 1 Mini-Java Ein Mini-Java Programm besteht aus genau einer Klasse. In dieser Klasse gibt es genau eine main-methode. Folgende Konstrukte
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern
Mehr1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH
1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH Die Umgebungsvariable CLASSPATH kann im Hamster-Simulator sowohl für Compiler als auch für die Ausführung des Hamster-Programms gesetzt werden: Hierdurch
MehrDr. Monika Meiler. Inhalt
Inhalt 3 C-Ausdrücke...3-2 3.1 Arithmetische Ausdrücke...3-3 3.2 Wertzuweisungen...3-5 3.3 Inkrementieren und Dekrementieren...3-6 3.4 Logische Ausdrücke (Bedingungen)...3-7 3.5 Bedingte Ausdrücke...3-8
MehrEinstieg in die Informatik mit Java
1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,
MehrOperatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011
Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 Operatoren für elementare Datentypen 2 Bedingte Anweisungen 3 Schleifen Zuweisungsoperator Die Zuweisung von Werten an
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
Mehr1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster
1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster Aufgabe: Bearbeitungszeit: ca. 1/4 Std) Schreiben Sie ein "objektorientiertes" Programm ("CuB_05_1") für das Sammeln der Körner. Aufgabenbeschreibung:
MehrGrundlagen der Objektorientierten Programmierung - Statische Arrays
Statische Arrays Ein Array ist ein Behälter für Datenelemente desselben Typs. Arrays können beliebig viele Dimensionen haben. Die Standardform ist das eindimensionale Array, das man sich in Zeilenform
MehrZeiger, Arrays und Strings in C und C++
Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für
MehrJava 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrString-Konkatenation
YOU ARE HERE Ausdrücke und Anweisungen Einführung Objektorientierte Modellierung Java-Sprachkonstrukte Pakete und Zugriffskontrolle Deklaration von Methoden, Attributen, Variablen Ausdrücke und Anweisungen
MehrKlausur Fachprüfung Wirtschaftsinformatik. Name:
Klausur Fachprüfung Wirtschaftsinformatik Dauer: 2 Stunden Datum: 02.10.2003 Name: Punkte True-or-False: von 15 Punkte Multiple Choice: von 15 Punkte Quickies: von 30 Punkte Shorties: von 20 Punkte Longies:
MehrPräzedenz von Operatoren
Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrSoftwareentwicklung Ausdrücke und Typkonversionen
Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Ausdrücke und Typkonversionen E-Mail: sonntag@fim.uni-linz.ac.at http://www.fim.uni-linz.ac.at/staff/sonntag.htm Institut für Informationsverarbeitung
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrTag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017 Willkommen zum Informatik-Repetitorium!
Mehr620.900 Propädeutikum zur Programmierung
620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Arrays Wiederholung (1/5) Array = GEORDNETE
MehrElementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 1: Bezeichner, Elementare Datentypen, Variablen, Referenzen, Zuweisungen, Ausdrücke Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Bezeichner
MehrDas Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala
Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:
MehrThemen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren
Themen Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Statische Methoden Klassenmethoden Merkmal der Klasse nicht eines einzelnen Objekts
Mehr