elementare datentypen - uni bremenroefer/pi1help/2.pdf · einführung in die programmierung mit...
TRANSCRIPT
Einführung in die Programmierung mit Java 37
Universität Bremen
Elementare Datentypen
� Datentyp Default Speicherplatz Wertebereich� byte 0 1 Byte (8 Bits) -128 bis 127
� short 0 2 Bytes (16 Bits) -32768 bis 32767
� int 0 4 Bytes (32 Bits) -2147483648 bis 2147483647
� long 0 8 Bytes (64 Bits) -9223372036854775808 bis9223372036854775807
� float 0.0 4 Bytes (32 Bits) ±1.40239846E-45 bis±3.40282347E+38
� double 0.0 8 Bytes (64 Bits) ±4.94065645841246544E-324 bis±1.79769313486231570E+308
� boolean false ? (min. 1 Bit) false, true
� char '\u0000' 2 Bytes (16 Bits) '\u0000' bis '\uFFFF'
Einführung in die Programmierung mit Java 38
Universität Bremen
Ganzzahlige Datentypen
� Zahlensysteme
� Dezimal, es gibt die Ziffern 0 bis 9 44 22
11 0011 000011
55 22
22 AA
32+8+232+8+2=
5*8+25*8+2=
2*16+102*16+10=
� Binär, nur die Ziffern 0 und 1
� Oktal, nur die Ziffern 0 bis 7
� Hexadezimal, die Ziffern 0 bis 9 und A bis F
� Literale� Dezimal: 42, +42, -42, 42L, 42l
� Oktal: 052, +052, -052, 052L, 052l� Hexadezimal: 0x2A, +0x2a, -0x2A, 0x2aL, 0x2Al
4*10+24*10+2=
Ein L am Ende bedeutet long
Ein L am Ende bedeutet long
Einführung in die Programmierung mit Java 39
Universität Bremen
Fließkommazahlen
� Format
Ein F am Ende bedeutet float, ein D double. Wird nichts an-gegeben, ist der Typ double
Ein F am Ende bedeutet float, ein D double. Wird nichts an-gegeben, ist der Typ double
11 77EE ++551111 4422 ..44--
� Exponent
� Wert = Mantisse × 10Exponent
� Literale� Float: 0.0f, .382f, 3.1415F, -3.1415f, 17E7f, 17e-7f, 17E+7F� Double: 0.0, .0392039029303, -3.141592653589d, 1E+100
� Mantisse
Einführung in die Programmierung mit Java 40
Universität Bremen
Zeichen
� Literale� Normal: 'a', 'b', 'c'
� Wagenrücklauf: '\r'
Java-Quelltexte werden im Unicode verarbeitet. An jeder Stelle kann \uXXXX stehen.
Java-Quelltexte werden im Unicode verarbeitet. An jeder Stelle kann \uXXXX stehen.
f\u006fr(int i = 0; i < 10; ++i)f\u006fr(int i = 0; i < 10; ++i)
for(int i = 0; i < 10; ++i)for(int i = 0; i < 10; ++i)
=\ = Escape-Zeichen\ = Escape-Zeichen
� Zeilenvorschub: '\n'� Seitenvorschub: '\f'� Tabulatorsprung: '\t'
� Backspace: '\b'� Hochkomma: '\''� Backslash: '\\'
� Unicode Zeichen: '\u12ab'
Einführung in die Programmierung mit Java 41
Universität Bremen
Zeichenketten
� String ist eine Klasse, kein Basistyp� Daher kann man Ausdrücke schreiben, wie z.B. s.equals("Hallo")
� Literale� "Hallo", "wie geht's?"
� "Ich sage \"mir geht's gut\"" → Ich sage "Mir geht's gut"
� Beispiele� System.out.println("\"DM\"\t\"Euro\"\n1\t0,51");� "DM" "Euro"
1 0,51
In String-Literalen können alle Escape-Sequenzen aus char-Literalen verwendet werden
In String-Literalen können alle Escape-Sequenzen aus char-Literalen verwendet werden
Einführung in die Programmierung mit Java 42
Universität Bremen
Typkonvertierung
� Automatisch� byte → short → int → long → float → double
� Manuell� byte b; short s; int i; long l; float f = 1.5; double d = -1.5; char c;
� b = (byte) f; (b == 1)� f = (float) 178.2� l = (int) d; (l == -2)
� c = (char) 32
� char
Bei der Typumwandlung von double/float in einen Ganzzahltyp wird immer abgerundet
Bei der Typumwandlung von double/float in einen Ganzzahltyp wird immer abgerundet
� Durch Funktionen� String s = Integer.toString(i);� i = Integer.parseInt(s);� d = Double.parseDouble(s);
Einführung in die Programmierung mit Java 43
Universität Bremen
Wrapper-Klassen
� Datentyp Wrapper� byte Byte
� short Short� int Integer� long Long
� float Float� double Double� boolean Boolean
� char Character
� Datentyp Wrapper� byte Byte
� short Short� int Integer� long Long
� float Float� double Double� boolean Boolean
� char Character
� Generell� Wrapper.MAX_VALUE
� z.B. Byte.MAX_VALUE
� Wrapper.MIN_VALUE� Wrapper.parseWrap(String s)
� z.B. Integer.parseInt("1234");
� Wrapper.toString(type t)� z.B. Integer.toString(1234);
� Float und Double� Wrapper.NEGATIVE_INFINITY
� z.B. Double.NEGATIVE_INFINITY
� Wrapper.POSITIVE_INFINITY
� Wrapper.NaN
� Generell� Wrapper.MAX_VALUE
� z.B. Byte.MAX_VALUE
� Wrapper.MIN_VALUE� Wrapper.parseWrap(String s)
� z.B. Integer.parseInt("1234");
� Wrapper.toString(type t)� z.B. Integer.toString(1234);
� Float und Double� Wrapper.NEGATIVE_INFINITY
� z.B. Double.NEGATIVE_INFINITY
� Wrapper.POSITIVE_INFINITY
� Wrapper.NaN
Einführung in die Programmierung mit Java 44
Universität Bremen
Nachschlagen in der Dokumentation
Einführung in die Programmierung mit Java 45
Universität Bremen
int boolean String
i b s
Variablen
7 true "Hallo"
� Richtig� int i = 7;� boolean b = true;� String s = "Hallo";
� Falsch� boolean b = 7;� boolean b = "Hallo";
Einführung in die Programmierung mit Java 46
Universität Bremen
Konstanten
� Allgemein� Konstanten sind benannte Literale, können also überall verwendet werden, wo auch
Literale zulässig sind (z.B. hinter case in der switch-Anweisung)� Im Gegensatz zu Variablen kann sich der Wert einer Konstanten niemals ändern
� Beispiel:� final int IS_NUMBER = 1,
IS_KEYWORD = 2;:
switch(type){
case IS_NUMBER::
case IS_KEYWORD::
}
Einführung in die Programmierung mit Java 47
Universität Bremen
Bezeichner für Variablen/Konstanten
� Erstes Zeichen muss ein Buchstabe, '_' oder '$' sein� Alle weiteren Zeichen können Buchstaben, Ziffern, '_' oder '$' sein� Für Variablen keine Bezeichner von Schlüsselwörtern verwenden
� abstract default if private throwboolean do implements protected throwsbreak double import public transientbyte else instanceof return trycase extends int short voidcatch final interface static volatilechar finally long super whileclass float native switchconst for new synchronizedcontinue goto package this
� Groß- und Kleinschreibung wird unterschieden
Einführung in die Programmierung mit Java 48
Universität Bremen
Konventionen für Bezeichner
� Variablen� Für Laufvariablen in Schleifen: i, j� Für die Argumente von main: args� Variablen beginnen mit Kleinbuchstaben: stream
� Mehrere Worte werden durch Großbuchstabenaneinander gefügt: thisIsAVeryLongName
� '_' und '$' werden nicht verwendet
� Konstanten� Nur Großbuchstaben, Ziffern und '_' MAX_WORDS, Math.PI
� Klassen� Genau wie Variablen, beginnen aber mit einem System, Greetings
Großbuchstaben
Einführung in die Programmierung mit Java 49
Universität Bremen
Lebenszeit/Sichtbarkeit
� Lebenszeit� In Funktionen bis Ende des aktuellen Blocks {...}
� Ausnahme: Funktionsparameter� void f(int a) {...} ist eigentlich void f { (int a) {...} }
� Ausnahme: Definitionen in for� for(int i = 0; i < 10; ++i) {...} ist eigentlich
{ for(int i = 0; i < 10; ++i) {...} }
� Sichtbarkeit, Suchen nach Bezeichner� In Funktion rückwärts, aber nicht in Blöcke hinein� In Funktionsparametern
� In Klasse (auch hinter der aktuellen Funktion)
� Mehrfachdefinitionen� nicht in Funktionen, d.h. void f(int a) {int a; {int a;}} nicht erlaubt
class HideAndSeek{
static int target;static void main(String[] args){System.out.println(target);{int target = 17;System.out.println(target);
}System.out.println(target);
}}
class HideAndSeek{
static int target;static void main(String[] args){System.out.println(target);{int target = 17;System.out.println(target);
}System.out.println(target);
}}
Einführung in die Programmierung mit Java 50
Universität Bremen
Arrays
� Definition� Eine Reihung fester Länge von
Variablen gleichen Typs, auf die mit einem Index zugegriffen werden kann.
� Arrays sind Objekte
� Beispiel� String[.] a = {
"Herbert Pappelbusch","Irene Schmidt","Claudia Miesmuffel",
:"Tobias Kleinemann","Mareike Bumtrupp"
};
Einführung in die Programmierung mit Java 51
Universität Bremen
Eindimensionale Arrays
� Beispiel� String[.] a = new String[50];
a[0] = "Herbert Pappelbusch";a[1] = "Irene Schmidt";a[2] = "Claudia Miesmuffel";
:a[48] = "Tobias Kleinemann";a[49] = "Mareike Bumtrupp";
String s = "Tobias Kleinemann";
for(int i = 0; i < a.length; ++i)if(a[i].equals(s))
System.out.println("Gefunden!");
Einführung in die Programmierung mit Java 52
Universität Bremen
Zweidimensionale Arrays
� Beispiel� String[.][.] a =
{{"Herbert","Pappelbusch","Herr"},{"Irene","Schmidt","Frau"},
:};
for(int i = 0; i < a.length; ++i)System.out.println(a[i][2] + " " +
a[i][0] + " " + a[i][1]);
Einführung in die Programmierung mit Java 53
Universität Bremen
Mehrdimensionale Arrays
� Dimensionen� Eine beliebige Anzahl von Dimensionen ist möglich
� Speicherplatzverbrauch bedenken!
� Ein zweidimensionales Array ist ein Array von Arrays
� Daher können die Arrays in weiteren Dimensionen selbst auch wieder unterschiedliche Größen haben
� Beispiel� int[.][.] a = new int[5][.];
a[0] = new int[3];a[1] = new int[2];a[2] = new int[4];
Einführung in die Programmierung mit Java 54
Universität Bremen
Operatoren
� Stelligkeiten� Unäre Operatoren, z.B die Vorzeichen '+' oder '-'
� Binäre Operatoren, z.B. die Rechenoperationen '+' oder '-'� Trinärer Operator '? :'
� Arten� Vergleichsoperatoren, z.B. '>' oder '<'
� Logische Operatoren, z.B. '&&' oder '||'� Arithmetische Operatoren, z.B. '+' oder '-'� Bit-Operatoren, z.B. '>>' oder '&'
� Zuweisungsoperatoren
� Operatoren können abhängig vom Typ der Operanden unterschiedliche Auswirkungen haben� z.B. ist 1+1 == 2, aber "1"+"1" ergibt "11"
Einführung in die Programmierung mit Java 55
Universität Bremen
Vergleichsoperatoren
� Allgemein� Vergleichsoperatoren liefern immer einen Wahrheitswert (boolean) zurück
� Beide Operanden müssen einen kompatiblen Typ haben
� Numerische Operatoren� Gleichheit: age == 18� Ungleichheit: age != 18
� Größer: age > 18� Größer oder gleich: age >= 18� Kleiner: age < 18
� Kleiner oder gleich: age <= 18
� Für Objekte (z.B. Strings)� Identität: s1 == s2 (Ist s1 dieselbe Zeichenkette wie s2?)� Gleichheit s1.equals(s2) (ist kein Operator sondern eine Funktion)
Einführung in die Programmierung mit Java 56
Universität Bremen
Logische Operatoren
� Allgemein� Logische Operatoren verrechnen ein oder zwei Wahrheitswerte zu einem
neuen Wahrheitswert
� Operatoren� Logisches Nicht: !(age > 18) == (age <= 18)� Logisches Und: age > 18 && age < 65� Logisches Oder: age <= 18 || age >= 65
� Unvollständige Auswertung� if(age > 18 && age < 65) ... entspricht if(age > 18)
if(age < 65) ...� if(age <= 18 || age >= 65) ... entspricht if(age > 18) ...
else if(age < 65) ...� Nützlich z.B. für if(d != 0 && 100 / d > 1)
oder if(d == 0 || 100 / d > 1)
Einführung in die Programmierung mit Java 57
Universität Bremen
Arithmetische Operatoren
� Allgemein� Arithmetische Operatoren verrechnen ein oder zwei Werte zu einem neuen
Wert� Bei zwei Operanden müssen beide einen kompatiblen Typ haben� Der Ergebnistyp ist identisch mit dem „größeren“ Typ der beiden Operanden
� Operatoren� Addition: a + b, 17 + 4, 17 + 4.0
"a" + "b" ("ab"), 17 + "4" ("174"), "17" + 4. ("174.0")
� Subtraktion: a - b, 17 - 4, 17 - 4.0� Multiplikation: a * b, 17 * 4, 17 * 4.0� Division: a / b, 17 / 4 (== 4), 17 / 4.0 (== 4.25)
� Modulo (Divisionsrest): a % b, 17 % 4 (== 1), 17.5 % 4.5 (== 4.0)
Einführung in die Programmierung mit Java 58
Universität Bremen
Arithmetische Operatoren
� Ganzzahlarithmetik� Überlauf ist kein Fehler
� Das Ergebnis wird auf die entsprechende Bit-Anzahl gekappt� Division durch 0 ist nicht erlaubt (erzeugt ArithmeticException: / by zero)
� Fließkommaarithmetik� Division durch 0 ist kein Fehler!
� +x / 0.0 == Double.POSITIVE_INFINITY� -x / 0.0 == Double.NEGATIVE_INFINITY� 0.0 / 0.0 == Double.NaN
� Bei einem Überlauf wird Double.POSITIVE_INFINITY oder Double.NEGATIVE_INFINITY
Einführung in die Programmierung mit Java 59
Universität Bremen
Bit-Operatoren
� Allgemein� Bit-Verknüpfungen können auf Ganzzahltypen und boolean angewendet
werden
� Verknüpfungen� Und 0xea & 0x4c 11 0011 0000111111
00 0011 1100001100
00 0011 0000001100
&
==
� Oder 0xea | 0x4c� Exklusiv-Oder 0xea ^ 0x4c
� Nicht ~0xea
� Verschiebungen� Links 0xea << 3� Rechts 0xea >> 3� Vorzeichenlos rechts 0xea >>> 3
Einführung in die Programmierung mit Java 60
Universität Bremen
Zuweisungsoperatoren
� Zuweisung: i = 7, s = "Hallo" , a[a[i]][2][17] = 42 + ix = y = z = 0, a[x = 7] = 1
� Rechnen und Zuweisung: i += 17, a[a[1]] <<= 4, x *= x� Variable op= ausdruck entspricht Variable = Variable op ausdruck, aber die
Variable wird nur einmal ausgewertet
� Pre-Inkrement/Dekrement: ++i, ++a[5], a[--i] = a[i]� Post-Inkrement/Dekrement: i++, a[5]++, a[i--] = a[i]
� Ein Post-Inkrement/Dekrement verändert den Wert der Variablen, liefert aber den alten Wert als Ergebnis zurück
� int i = 0; int j = 0;a[i++] = 17; b[++j] = 42;a[i++] = 18; b[++j] = 43;
� a[0] == 17, a[1] == 18 b[1] == 42, b[2] == 43
Einführung in die Programmierung mit Java 61
Universität Bremen
Sonstige Operatoren
� If-Else� bedingung ? ausdruck : ausdruck
� z.B. a = b == 0 ? 0 : 100 / b;r = r >= Math.PI
? r - 2 * Math.PI : r < -Math.PI ? r + 2 * PI : r;
� new� new erzeugt neue Objekte oder Arrays
� z.B. int[] a = new int[10];FileInputStream stream = new FileInputStream("aFile");
� Typumwandlung� int a = (int) 3.1415
Einführung in die Programmierung mit Java 62
Universität Bremen
Vorrang von Operatoren
� Bindungsstärke� Was wird zuerst ausgewertet, wenn verschiedene Operatoren in einem
Ausdruck verwendet werden?� z.B. Punkt- vor Strichrechnung: 1 + 2 * 3 = 1 + (2 * 3) = 7
� Assoziativität� Was wird zuerst ausgewertet, wenn Operatoren gleicher Bindungsstärke in
einem Ausdruck verwendet werden?� z.B. links bei Minus: 3 - 2 - 1 = (3 - 2) - 1 = 0
� Beispiel� a = a >> 4 & 0x0f | a << 4 & 0xf0� a = (((a >> 4) & 0x0f) | ((a << 4) & 0xf0)) 11 0011 0000111111
Einführung in die Programmierung mit Java 63
Universität Bremen
Vorrang von Operatoren
� Operator Asso. Beschreibung� .,(),[] links Funktionsaufruf und Array-Index� -,+,!,~,++,-- rechts Vorzeichen, logisches Nicht, arithm. Nicht, In-, Dekrement� new,(typ) rechts Objekterzeugung und Typumwandlung� *,/,% links Multiplikation, Division, Modulo� +,- links Addition und Subtraktion� <<,>>,>>> links Links- und Rechtsverschiebung� <,<=,>,>= Kleiner, Kleiner-Gleich, Größer, Größer-Gleich� ==,!= links Gleichheit und Ungleichheit� & links arithmetisches Und� ^ links arithmetisches Exklusiv Oder� | links arithmetisches Oder� && links logisches Und� || links logisches Oder� ? : links arithmetisches If-Else� =,+=,-=,*=,/=,%=,^= rechts Zuweisung und Rechenzuweisung� &=,|=,<<=,>>=,>>>= rechts Rechenzuweisung
Bin
dung
sstä
rke
Einführung in die Programmierung mit Java 64
Universität Bremen
Ein UPN-Rechner
� Umgekehrte Polnische Notation� Die Operanden kommen zuerst, dann kommt der Operator, z.B. 1 2 +
� Arbeitet als Stack-Maschine: Jeder Operator holt sich seine Operanden von der Spitze des Stapels und legt das Ergebnis wieder dort ab
� Beispiel� Für 1 + 2 * 3 schreibt man: 1 2 3 * +
77+
11
66*
11
22
333
11
222
111
Einführung in die Programmierung mit Java 65
Universität Bremen
Ein UPN-Rechner
Einführung in die Programmierung mit Java 66
Universität Bremen
Ein UPN-Rechner