13. Erweiterte Konzepte Grundlagen der - fbi.h

Werbung
13. Erweiterte Konzepte
Grundlagen der
Programmierung 1 (Java)
Fachhochschule Darmstadt
Haardtring 100
D-64295 Darmstadt
Prof. Dr. Bernhard Humm
FH Darmstadt, 31. Januar 2006
Einordnung im Kontext der Vorlesung
1. Einführung
8. Parametrisierte Typen (Generics)
2. Einfache Programme
9. Fehler und Ausnahmen
3. Kontrollstrukturen
10. Gutes Programmieren
4. Objekt-Orientierung
11. Komponenten
5. Algorithmen und Datenstrukturen
12. Rekursion
6. Interfaces
13./14. Erweiterte Konzepte
7. Pakete
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 2
Agenda
Characters Advanced
Characters
Advanced
Strings Advanced
Arrays Advanced
Subversion
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 3
char Zeichencodes: ASCII und Unicode
ASCII (American Standard Code for Information Interchange)
• 1 Zeichen = 1 Byte (128 bzw. 256 Zeichen darstellbar)
• z.B. in Pascal oder C verwendet
Unicode (www.unicode.org)
• 1 Zeichen = 2 Bytes (65536 Zeichen darstellbar)
• auch Umlaute, griechische, arabische Zeichen etc.
• z.B. in Java und C# verwendet
• ASCII ist Teilmenge von Unicode
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 4
ASCII Code
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
space
!
"
#
$
%
&
'
(
)
*
+
,
.
/
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
´
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
Wichtige Steuerzeichen
BS backspace
löscht Zeichen vor Cursor
HT horizontal tab Tabulatorsprung
ESC escape
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
CR
LF
FF
Zeilenvorschub
carriage return
folgt auf CR
line feed
Seitenvorschub
form feed
31.1.2006, Seite 5
Unicode
0000 - 007F
0080 - 024F
0370 - 03FF
0400 - 04FF
0530 - 058F
0590 - 05FF
0600 - 06FF
...
ASCII-Zeichen
Umlaute, Akzente, Sonderzeichen
griechische Zeichen
cyrillische Zeichen
armenische Zeichen
Details siehe
hebräische Zeichen
http://www.unicode.org
arabische Zeichen
...
Deutsche Umlaute
00E4 ä
00F6 ö
00FC ü
00C4 Ä
00D6 Ö
00DCÜ
00DF ß
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 6
Unicode-Zeichenkonstanten
Alle Zeichen können auch mit ihrem Unicode-Wert angegeben werden:
'\udddd'
Beispiele:
'\u0041'
'\u000d'
'\u0009'
'\u03c0'
'A'
CR (carriage return)
TAB
p
Spezielle Zeichen
'\n'
'\r'
'\t'
'\\'
'\''
'\ddd'
LF (line feed, newline)
CR (carriage return)
TAB
\
'
Zeichenwert als Oktalzahl
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 7
Zeichen-Operationen
Zuweisungen
char ch1, ch2 = 'a';
ch1 = ch2;
// ok, gleicher Typ
int i = ch2;
// ok, char kann int zugewiesen werden
ch1 = (char)i; // Zuweisung nach Typumwandlung möglich
double ⊇ float ⊇ long ⊇ int ⊇ short ⊇ byte
⊇ char
Vergleiche (==, !=, <, <=, >, >=)
Zeichen sind nach Unicode-Wert geordnet;
Buchstaben und Ziffern liegen aufeinanderfolgend
if ('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z') ...
Arithmetische Operationen (+, -, *, /, %)
10 + (ch - 'A')
// Ergebnistyp: int
Zeichenarrays
char[] s = new char[20];
char[] t = {'a', 'b', 'c'};
// initialisiert alle Elemente mit '\u0000'
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 8
Beispiel: Nachbauen von readInt
static int readInt() {
int val = 0;
char ch = In.read(); // liest ein einzelnes Zeichen
while (In.done() && '0' <= ch && ch <= '9') {
val = 10 * val + (ch - '0');
ch = In.read();
}
// ! In.done() || ch < '0' || ch > '9'
return val;
}
Schreibtischtest: Eingabe 123+
val
0
1
12
123
ch
'1'
'2'
'3'
'+'
(49)
(50)
(51)
(43)
'0' = 48
"Horner-Schema"
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 9
Standardfunktionen mit Zeichen
if (Character.isLetter(ch)) ...
if (Character.isDigit(ch)) ...
if (Character.isLetterOrDigit(ch)) ...
true, wenn ch ein Unicode-Buchstabe ist
true, wenn ch eine Ziffer ist
if (Character.isJavaIdentifierStart(ch)) ...
if (Character.isJavaIdentifierPart(ch)) ...
true, wenn ein Java-Name mit ch beginnen kann
true, wenn ch in einem Java-Namen vorkommen kann
if (Character.isLowerCase(ch)) ...
if (Character.isUpperCase(ch)) ...
true, wenn ch ein Kleinbuchstabe ist
true, wenn ch ein Großbuchstabe ist
ch1 = Character.toUpperCase(ch2);
ch1 = Character.toLowerCase(ch2);
wandelt ch2 in einen Großbuchstaben um
wandelt ch2 in einen Kleinbuchstaben um
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 10
Agenda
Characters Advanced
Strings Advanced
Strings
Advanced
Arrays Advanced
Subversion
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 11
Klassen zur String-Verarbeitung
– Zeichenketten (Strings) sind in Java Objekte
– Java stellt drei Klassen für den Umgang mit Strings zur Verfügung
– Klasse String
für konstante Zeichenketten, die nachträglich nicht mehr verändert werden
können
– Klasse StringBuffer
für variable Zeichenketten; es stehen Operationen zum Einfügen und Ändern
zur Verfügung
– Klasse StringTokenizer
um eine Zeichenkette in einzelne Teilzeichenketten (substrings) zu zerlegen;
hierzu können Trennzeichen spezifiziert werden, die die einzelnen Teilketten
voneinander trennen
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 12
Klasse String
– Zeichenketten sind Objekte auf die über Referenztypen
verwiesen wird
– eine konstante Zeichenkette ist eine unveränderbare Folge von
Zeichenkonstanten (Länge und Inhalt sind konstant)
– wichtige Unterschiede
String s3 = "";
// neues String-Objekt mit leerem String als
Wert
String s4 = " "; // String-Objekt erzeugt mit 1 Blank als
Wert
String s5 = null; // kein String-Objekt erzeugt
s3
""
s4
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
" "
s5
?
31.1.2006, Seite 13
Identität von Strings
String s5 = "Welt";
– eines neues String-Objekt erzeugt (mit dem Wert “Welt“)
– die Referenzvariable s5 verweist darauf
s5
“Welt“
s5 = "Europa";
– ein neues String-Objekt wird erzeugt
(mit dem Wert “Europa“)
s5
“Welt“
“Europa“
– Referenzvariable s5 verweist nun darauf
– Referenz auf das alte Objekt (“Welt“) geht verloren
String s6 = s5
– es wird neue Referenzvariable s6 erzeugt
– s6 verweist auf das selbe Objekt wie die s5
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
s5
s6
"Europa"
31.1.2006, Seite 14
String Methoden (1/2)
– Konkatenation (Aneinanderhängen) von Strings über speziellen Operator +
z.B.: System.out.println( "Hallo" + "Welt" );
– Vergleichen von Strings
– Vergleich 2 Referenzvariablen mit == vergleicht nur deren Referenzen
– Vergleich des Inhalts zweier String-Objekte mit Methode equals()
if (str1.equals(str2)) ... // str1 & str2 seien String-Objekte
– Inhalt (Werte) eines String-Objektes kann nie geändert werden
– jede Zuweisung erzeugt immer ein neues String-Objekt
String s = "Hallo";
s = s + " Welt";
s
s
– benötigt man String-Objekte, die verändert werden
sollen, benötigt man eine andere Klasse StringBuffer
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
"Hallo"
"Hallo"
"Hallo Welt"
31.1.2006, Seite 15
String Methoden (2/2)
Konstruktoren
// erzeugt neuen String als Kopie von s
String (String s)
statische Methoden
static String valueOf(int i)
// erzeugt String-Objekt aus int-Wert
static String valueOf(double d)
// erzeugt String-Objekt aus double-Wert
Instanz-Methoden
int length()
// liefert Länge des Strings
char charAt(int index)
// liefert Zeichen an Stelle index
int compareTo(String par)
// lexikographische Ordnung
// 0, falls beide Strings gleich sind, einen negativen Wert, falls this-String < par
// entfernt Blanks an Anfang und Ende
String trim()
String substring(int beg, int end);
// liefert Teilstring mit Indizes beg<= i < end
int indexOf(String par)
// sucht String par & liefert Index auf 1.Vorkommen
// -1, falls es den String nicht gibt
int indexOf(String par, int j)
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
// sucht String par ab Index j
31.1.2006, Seite 16
Beispiel: Entfernen doppelter Blanks
– Aufgabe: Programm soll zwei aufeinanderfolgende Blanks durch
ein einzelnes ersetzen!
Hallo__Welt
–
->
Hallo_Welt
Programm-Ausschnitt Spaces.java (ohne Eingabe)
String s = "dieser
String enthält viele Blanks";
int blankPos = 0, starteSucheVon = 0;
while (true) {
blankPos = s.indexOf(" ",starteSucheVon);
if (blankPos==-1)
// keine Blanks mehr enthalten
break;
else if (blankPos==0)
// Blank direkt am Anfang
s = s.substring(1,s.length()-1);
// 1. Zeichen entfernen
else s = s.substring(0,blankPos) // substring < blankPos
+ " "
// 1 Blank
+ s.substring(blankPos+2,s.length()-1);// restl.String
starteSucheVon = blankPos+2;
}
System.out.println(s);
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 17
Klasse StringBuffer - Variable Zeichenketten
– Klasse StringBuffer repräsentiert veränderbare Zeichenketten mit
folgenden Eigenschaften
– Länge der Zeichenkette ist nicht festgelegt
– Inhalt einer Instanz lässt sich verändern.
– Erzeugung von StringBuffer-Objekten mit new und Konstruktoren
– StringBuffer()
– StringBuffer(int length)
– StringBuffer(String str)
– Methoden zur Manipulation von Zeichenketten
– Anhängen an das Ende einen vorhanden String:
append(String s) oder append(StringBuffer sb)
– Einfügen in einen vorhanden String:
insert(int pos, String s)
– Konvertierung einer variablen in eine konstante Zeichenkette
String s = sb2.toString();
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 18
Beispiel StringBuffer
– Vorgehensweise zur Manipulation von String-Objekten
– Umwandlung des zu manipulierenden String-Objektes in
StringBuffer-Objekt
– Manipulation mit StringBuffer-Methoden
– Rückumwandlung mittels toString-Methode in StringObjekt
String str = "moin moin";
StringBuffer buffer = new StringBuffer(str);
for (int i=0; i < buffer.length(); i++)
If (buffer.charAt(i) == 'o')
buffer.setCharAt(i,'e');
str = buffer.toString();
System.out.println(str); // mein mein
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 19
Klasse StringTokenizer - Zerlegung von Zeichenketten
Klasse StringTokenizer ermöglicht es, eine Zeichenkette in einzelnen
Zeichenketten zu zerlegen
– Trennzeichen müssen spezifiziert werden, die Teilzeichenketten (Token)
trennen
– Konstruktoren
– StringTokenizer(String str)
erzeugt neues Objekt für str mit voreingestellten Trennzeichen
Leerzeichen, Tabulator etc.
– StringTokenizer(String str, String delimiters)
erzeugt neues Objekt für str. Als Trennzeichen dienen die in delimiters
enthaltenen Zeichen
– wichtigste Methoden
– public String nextToken()
liefert die nächste Teilzeichenkette
– public boolean hasMoreToken()
wahr wenn noch weitere Token vorliegen
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 20
Beispiele StringTokenizer
String text = "Name, Vorname";
StringTokenizer Teilkette = new StringTokenizer(text,",");
String name = Teilkette.nextToken();
String vorname = Teilkette.nextToken();
String name = "aber = hallo + hier";
StringTokenizer st = new StringTokenizer(name, "+=");
while ( st.hasMoreTokens() ) {
System.out.println( st.nextToken() );
}
Ausgabe: > aber
> hallo
> hier
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 21
Agenda
Characters Advanced
Strings Advanced
Arrays Advanced
Arrays
Advanced
Subversion
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 22
Mehrdimensionale Arrays (1/2)
a[0][0]
a[0][2]
Zweidimensionales Array ≡ Matrix
a[0]
a[1]
a[2]
a[3]
In Java als Array von Arrays implementiert
a
a[0][0]
a[0][1]
a[0][2]
Deklaration und Erzeugung
a[0]
a[1][0]
a[1][1]
a[1][2]
a[2][0]
a[2][1]
a[2][2]
a[3][0]
a[3][1]
a[3][2]
a[1]
a[2]
int[][] a;
a = new int[4][3];
Zugriff
a[i][j] = a[i][j]+1;
a[3]
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 23
Mehrdimensionale Arrays (2/2)
Zeilen können unterschiedlich lang sein (das ist aber selten sinnvoll)
a
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0]
a[1][0]
a[1][1]
a[2][0]
a[2][1]
a[1]
a[2][2]
int[][] a = new int[3][];
a[0] = new int[4];
a[1] = new int[2];
a[2] = new int[3];
a[2]
Initialisierung
int[][] a = {{1, 2, 3},{4, 5, 6}};
a
1
2
3
4
5
6
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 24
Beispiel: Matrixmultiplikation
b
a
i
×
k
c
=
i
j
j
c0,0 = a0,0*b0,0 + a0,1*b1,0 + a0,2*b2,0
static float[][] matrixMult (float[][] a, float[][] b) {
float[][] c = new float[a.length][b[0].length];
for (int i = 0; i < a.length; i++)
for (int j = 0; j < b[0].length; j++) {
float sum = 0;
for (int k = 0; k < b.length; k++)
sum += a[i][k] * b[k][j];
c[i][j] = sum;
}
return c;
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
⇒
⇒
⇒
⇒
31.1.2006, Seite 25
Agenda
Characters Advanced
Strings Advanced
Arrays Advanced
Subversion
Subversion
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 26
Subversion: ein exzellentes Open Source
Konfigurationsmanagement-System
http://subversion.tigris.org/)
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 27
Subclipse: Das Plugin von Subversion in Eclipse
2
3
1
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 28
SVN Repository Explorer
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 29
Team Synchronizing
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
31.1.2006, Seite 30
Herunterladen