Suchen und Finden
1 Tag 1: Vorbereitungen und Javas kleinste Bausteine
21
1.1 Warum gerade mit Java beginnen?
22
1.2 Installation von Java
23
1.2.1 Wahl einer Entwicklungsumgebung
23
1.2.2 Testen wir das installierte Java-System
24
1.3 Vorteile des Selbststudiums
26
1.4 Primitive Datentypen und ihre Wertebereiche
27
1.4.1 Primitive Datentypen allgemein
28
1.4.2 Primitive Datentypen in Java
28
1.5 Variablen und Konstanten
30
1.5.1 Deklaration von Variablen
30
1.5.2 Variablen versus Konstanten
31
1.6 Primitive Datentypen und ihre Operationen
32
1.6.1 Datentyp boolean
32
1.6.2 Datentyp char
35
1.6.3 Datentyp int
35
1.6.4 Datentypen byte, short und long
36
1.6.5 Datentypen float und double
37
1.7 Umwandlungen von Datentypen
38
1.7.1 Explizite Typumwandlung
39
1.7.2 Übersicht zu impliziten Typumwandlungen
40
1.7.3 Die Datentypen sind für die Operation entscheidend
40
1.8 Zusammenfassung und Aufgaben
41
2 Tag 2: Grundlegende Prinzipien der Programmentwicklung
43
2.1 Programm als Kochrezept
44
2.2 Methoden der Programmerstellung
45
2.2.1 Sequentieller Programmablauf
46
2.2.2 Verzweigungen
46
2.2.3 Sprünge
47
2.2.4 Schleifen
47
2.2.5 Parallelität
47
2.2.6 Kombination zu Programmen
48
2.3 Programme in Java
48
2.3.1 Erstellen eines Javaprogramms in Pseudocode
49
2.3.2 Erstellen eines Javaprogramms
49
2.4 Programmieren mit einem einfachen Klassenkonzept
50
2.5 Sequentielle Anweisungen
52
2.6 Verzweigungen
53
2.6.1 Verzweigung mit if
54
2.6.2 Verzweigung mit switch
55
2.7 Verschiedene Schleifentypen
56
2.7.1 Schleife mit for
56
2.7.2 Schleife mit while
58
2.7.3 Schleife mit do-while
59
2.8 Sprunganweisungen
60
2.8.1 Sprung mit break
60
2.8.2 Sprung mit continue
62
2.9 Funktionen in Java
63
2.10 Zusammenfassung und Aufgaben
66
3 Tag 3: Daten laden und speichern
68
3.1 Externe Programmeingaben
69
3.2 Daten aus einer Datei einlesen
70
3.3 Daten in eine Datei schreiben
72
3.4 Daten von der Konsole einlesen
72
3.5 Zusammenfassung und Aufgaben
73
4 Tag 4: Verwendung einfacher Datenstrukturen
75
4.1 Arrays
76
4.1.1 Deklaration und Zuweisung
77
4.1.2 Vereinfachte Schleife mit for
78
4.2 Matrizen oder multidimensionale Arrays
78
4.3 Conway's Game of Life
79
4.3.1 Einfache Implementierung
81
4.3.2 Auswahl besonderer Muster und Ausblick
84
4.4 Zusammenfassung und Aufgaben
84
5 Tag 5: Debuggen und Fehlerbehandlungen
86
5.1 Das richtige Konzept
87
5.2 Exceptions in Java
89
5.2.1 Einfache try-catch-Behandlung
90
5.2.2 Mehrfache try-catch-Behandlung
91
5.3 Fehlerhafte Berechnungen aufspüren
92
5.3.1 Berechnung der Zahl pi nach Leibniz
92
5.3.2 Zeilenweises Debuggen und Breakpoints
95
5.4 Zusammenfassung und Aufgaben
95
6 Tag 6: Erweitertes Klassenkonzept
97
6.1 Entwicklung eines einfachen Fußballmanagers
98
6.2 Spieler und Trainer
98
6.2.1 Generalisierung und Spezialisierung
98
6.2.2 Klassen und Vererbung
99
6.2.3 Modifizierer public und private
101
6.2.4 Objekte und Instanzen
102
6.2.5 Konstruktoren in Java
103
6.3 Torwart
105
6.4 Die Mannschaft
106
6.5 Turniere und Freundschaftsspiele
107
6.5.1 Ein Interface Freundschaftsspiel festlegen
107
6.5.2 Freundschaftsspiel FC Steinhausen-Oderbrucher SK
110
6.5.3 Beispiel zu Interface
113
6.5.4 Interface versus abstrakte Klasse
115
6.6 Zusammenfassung und Aufgaben
116
7 Tag 7: Aufarbeitung der vorhergehenden Kapitel
118
7.1 Referenzvariablen
119
7.2 Zugriff auf Attribute und Methoden durch Punktnotation
120
7.3 Die Referenzvariable this
121
7.4 Prinzip des Überladens
121
7.4.1 Überladung von Konstruktoren
122
7.4.2 Der Copy-Konstruktor
123
7.5 Garbage Collector
123
7.6 Statische Attribute und Methoden
124
7.7 Primitive Datentypen und ihre Wrapperklassen
125
7.8 Die Klasse String
126
7.8.1 Erzeugung und Manipulation von Zeichenketten
126
7.8.2 Vergleich von Zeichenketten
127
7.9 Zusammenfassung und Aufgaben
129
8 Tag 8: Verwendung von Bibliotheken
131
8.1 Standardbibliotheken
132
8.2 Funktionen der Klasse Math
134
8.3 Zufallszahlen in Java
134
8.3.1 Ganzzahlige Zufallszahlen vom Typ int und long
135
8.3.2 Zufallszahlen vom Typ float und double
136
8.3.3 Weitere nützliche Funktionen der Klasse Random
136
8.4 Das Spielprojekt BlackJack
137
8.4.1 Spielregeln
137
8.4.2 Spieler, Karten und Kartenspiel
138
8.4.2.1 Verwendungsbeispiel für die Datenstruktur Vector
138
8.4.2.2 Implementierung der Klassen Spieler, Karteund Kartenspiel
140
8.4.3 Die Spielklasse BlackJack
143
8.5 JAMA -- Lineare Algebra
149
8.6 Eine eigene Bibliothek bauen
151
8.7 Zusammenfassung und Aufgaben
152
9 Tag 9: Grafische Benutzeroberflächen
154
9.1 Fenstermanagement unter AWT
155
9.1.1 Ein Fenster lokal erzeugen
155
9.1.2 Vom Fenster erben und es zentrieren
156
9.2 Zeichenfunktionen innerhalb eines Fensters
157
9.2.1 Textausgaben
158
9.2.2 Zeichenfunktionen
158
9.2.3 Die Klasse Color
159
9.2.4 Bilder laden und anzeigen
160
9.3 Auf Fensterereignisse reagieren und sie behandeln
162
9.3.1 Fenster mit dem Interface WindowListener schließen
162
9.3.2 GUI-Elemente und ihre Ereignisse
165
9.3.2.1 Layoutmanager
165
9.3.2.2 Die Komponenten Label und Button
165
9.3.2.3 Die Komponente TextField
167
9.4 Auf Mausereignisse reagieren
168
9.5 Zusammenfassung und Aufgaben
170
10 Tag 10: Appletprogrammierung
171
10.1 Kurzeinführung in HTML
172
10.2 Applets im Internet
172
10.3 Funktionen eines Applets
173
10.4 Verwendung des Appletviewers
174
10.5 Eine Applikation zum Applet umbauen
176
10.5.1 Konstruktor zu init
176
10.5.2 paint-Methoden anpassen
177
10.5.3 TextField-Beispiel zum Applet umbauen
178
10.6 Flackernde Applets vermeiden
179
10.6.1 Die Ghosttechnik anwenden
181
10.6.2 Die update-Methode überschreiben
182
10.7 Ein Beispiel mit mouseDragged
183
10.8 Diebstahl von Applets erschweren
184
10.8.1 Download und Dekompilierung
185
10.8.2 Verwirrung durch einen Obfuscator
187
10.9 Zusammenfassung und Aufgaben
187
11 Tag 11: Techniken der Programmentwicklung
189
11.1 Der Begriff Algorithmus
190
11.2 Techniken zum Entwurf von Algorithmen
190
11.2.1 Prinzip der Rekursion
190
11.2.2 Brute Force
192
11.2.3 Greedy
193
11.2.4 Dynamische Programmierung und Memoisation
193
11.2.5 Teile und Herrsche
195
11.3 Algorithmen miteinander vergleichen
195
11.4 Kleine algorithmische Probleme
196
11.4.1 Identifikation und Erzeugung von Primzahlenmit Brute Force
196
11.4.2 Sortieralgorithmen
197
11.4.2.1 InsertionSort
197
11.4.2.2 BubbleSort
198
11.4.2.3 QuickSort
199
11.4.3 Needleman-Wunsch-Algorithmus
201
11.5 Zusammenfassung und Aufgaben
203
12 Tag 12: Bildverarbeitung
204
12.1 Das RGB-Farbmodell
205
12.2 Grafische Spielerei: Apfelmännchen
207
12.2.1 Mathematischer Hintergrund
207
12.2.2 Das Apfelmännchen-Fraktal in grau
209
12.2.3 Die Klasse BufferedImage
211
12.2.4 Bilder laden und speichern
212
12.2.5 Das Apfelmännchen-Fraktal in Farbe
214
12.3 Bilder bearbeiten
217
12.3.1 Ein Bild invertieren
218
12.3.2 Erstellung eines Grauwertbildes
219
12.3.3 Binarisierung eines Grauwertbildes
220
12.4 Zusammenfassung und Aufgaben
221
13 Tag 13: Methoden der Künstlichen Intelligenz
222
13.1 Mustererkennung
223
13.1.1 Einlesen der Trainingsdaten
223
13.1.2 k-nn Algorithmus
228
13.1.2.1 Visualisierung des Algorithmus
228
13.1.2.2 Implementierung eines k-nn Klassifikators
228
13.1.3 k-means Algorithmus
231
13.1.3.1 Bestimmung der k Prototypen
231
13.1.3.2 Expectation-Maximizationals Optimierungsverfahren
232
13.1.3.3 Allgemeine Formulierungdes k-means Algorithmus
233
13.1.3.4 Implementierung des k-means
233
13.2 Ein künstlicher Spielegegner
237
13.2.1 Der MinMax-Algorithmus
238
13.2.2 MinMax mit unbegrenzter Suchtiefe
238
13.2.3 MinMax mit begrenzter Suchtiefe und Bewertungsfunktion
240
13.2.4 Spieleprojekt TicTacToe
241
13.3 Zusammenfassung und Aufgaben
247
14 Tag 14: Entwicklung einer größeren Anwendung
248
14.1 Entwurf eines Konzepts
249
14.1.1 GUI Klassen
250
14.1.2 Spiellogik
251
14.1.3 Spieldatenverwaltung
251
14.1.4 Komplettes Klassendiagramm
253
14.2 Implementierung
253
14.2.1 Klasse TeeTristBox
253
14.2.2 Klasse TeeTristStein
253
14.2.3 Klasse TeeTristSpielfeld
257
14.2.4 Klasse SpielThread
261
14.2.5 Klasse TeeTristPanel
264
14.2.6 Klasse TeeTrist
265
14.3 Spielen wir ein Spiel TeeTrist
266
14.4 Dokumentation mit javadoc
266
14.5 Zusammenfassung und Aufgaben
267
15 Java -- Weiterführende Konzepte
269
15.1 Professionelle Entwicklungsumgebungen
270
15.2 Das Klassendiagramm als Konzept einer Software
270
15.3 Klassendiagramm mit UML
270
15.3.1 Klasse
271
15.3.2 Vererbung
271
15.3.3 Beziehungen zwischen Klassen
272
15.3.3.1 Beziehungen
272
15.3.3.2 Kardinalitäten
272
15.3.3.3 Aggregation und Komposition
273
15.4 Verwendung externer Bibliotheken
273
15.5 Zusammenarbeit in großen Projekten
274
Glossar
275
Literaturverzeichnis
280
Sachverzeichnis
283
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.