Table Of ContentRatz/Scheffler/Seese/Wiesenberger
Grundkurs Programmieren in Java
Band 1:
Der Einstieg in Programmierung und Objektorientierung
v
Bleiben Sie einfach auf dem Laufenden:
www.hanser.de/newsletter
Sofort anmelden und Monat für Monat
die neuesten Infos und Updates erhalten.
Dietmar Ratz
Jens Scheffler
Detlef Seese
Jan Wiesenberger
Grundkurs
Programmieren in Java
Band 1:
Der Einstieg in Programmierung
und Objektorientierung
3., aktualisierte und überarbeitete Auflage
Prof. Dr. Dietmar Ratz
Berufsakademie Karlsruhe, University of Cooperative Education
Dipl-Math. Jens Scheffler, INII Inc., Chesapeake, VA, USA
Prof. Dr. Detlef Seese
Universität Karlsruhe, Institut für Angewandte Informatik und Formale Beschreibungsverfahren
Dipl.-Wi.-Ing. Jan Wiesenberger, m+ps, Karlsruhe
Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bes-
tem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszu-
schließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit kei-
ner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen
infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige
Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Tei-
len davon – entsteht, auch nicht für die Verletzung von Patentrechten und anderen Rechten
Dritter, die daraus resultieren könnten. Autoren und Verlag übernehmen deshalb keine Ge-
währ dafür, dass die beschriebenen Verfahren frei von Schutzrechten Dritter sind.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem
Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass sol-
che Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten
wären und daher von jedermann benutzt werden dürften.
Bibliografische Information Der Deutschen Bibliothek:
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.
Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches,
oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des
Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für
Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Sys-
teme verarbeitet, vervielfältigt oder verbreitet werden.
© 2006 Carl Hanser Verlag München Wien (www.hanser.de)
Lektorat: Margarete Metzger
Produktionsbetreuung: Irene Weilhart
Copy-editing: Manfred Sommer, München
Datenbelichtung, Druck und Bindung: Kösel, Krugzell
Ausstattung patentrechtlich geschützt. Kösel FD 351, Patent-Nr. 0748702
Printed in Germany
ISBN-10: 3-446-40493-7
ISBN-13: 978-3-446-40493-9
DietmarRatz,JensScheffler,DetlefSeese,JanWiesenberger
Grundkurs Programmieren in Java
Band1:DerEinstieginProgrammierung undObjektorientierung
3.,u¨berarbeiteteAuflage
Inhaltsverzeichnis
Vorwort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1 Java–mehralsnurkalterKaffee? . . . . . . . . . . . . . . . . . . . . 15
1.2 Javafu¨rAnfa¨nger–dasKonzeptdiesesBuches . . . . . . . . . . . . 16
1.3 WeitereInfosundKontaktzudenAutoren . . . . . . . . . . . . . . 17
1.4 VerwendeteSchreibweisen . . . . . . . . . . . . . . . . . . . . . . . . 18
2 EinigeGrundbegriffeausderWeltdesProgrammierens . . . . . . . . . 19
2.1 Computer,Software,InformatikunddasInternet . . . . . . . . . . 19
2.2 WasheißtProgrammieren? . . . . . . . . . . . . . . . . . . . . . . . 22
I Einstieg indasProgrammiereninJava 27
3 AllerAnfangistschwer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1 MeinerstesProgramm . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Formeln,Ausdru¨ckeundAnweisungen . . . . . . . . . . . . . . . . 30
3.3 Zahlenbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4 VerwendungvonVariablen . . . . . . . . . . . . . . . . . . . . . . . 32
3.5 AufdenSchirm!“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
”
3.6 DasProgrammgeru¨st . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.7 Eingeben,u¨bersetzenundausfu¨hren . . . . . . . . . . . . . . . . . . 34
3.8 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 GrundlagenderProgrammierunginJava. . . . . . . . . . . . . . . . . . 37
4.1 GrundelementeeinesJava-Programms . . . . . . . . . . . . . . . . . 37
4.1.1 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.2 BezeichnerundNamen . . . . . . . . . . . . . . . . . . . . . 41
4.1.3 Literale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.4 ReservierteWo¨rter,Schlu¨sselwo¨rter . . . . . . . . . . . . . . 43
4.1.5 Trennzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.6 Interpunktionszeichen . . . . . . . . . . . . . . . . . . . . . . 44
4.1.7 Operatorsymbole . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.8 import-Anweisungen . . . . . . . . . . . . . . . . . . . . . . 45
4.1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.10 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2 ErsteSchritteinJava . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.1 GrundstruktureinesJava-Programms . . . . . . . . . . . . . 48
4.2.2 AusgabenaufderKonsole. . . . . . . . . . . . . . . . . . . . 49
4.2.3 EingabenvonderKonsole . . . . . . . . . . . . . . . . . . . . 51
4.2.4 Scho¨nerProgrammiereninJava . . . . . . . . . . . . . . . . 51
4.2.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 EinfacheDatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3.1 GanzzahligeDatentypen. . . . . . . . . . . . . . . . . . . . . 53
4.3.2 Gleitkommatypen . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.3 DerDatentypcharfu¨rZeichen . . . . . . . . . . . . . . . . 57
4.3.4 Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3.5 DerDatentypbooleanfu¨rWahrheitswerte . . . . . . . . . 58
4.3.6 ImpliziteundexpliziteTypumwandlungen . . . . . . . . . . 58
4.3.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3.8 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4 DerUmgangmiteinfachenDatentypen . . . . . . . . . . . . . . . . 61
4.4.1 Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4.2 OperatorenundAusdru¨cke . . . . . . . . . . . . . . . . . . . 65
4.4.2.1 ArithmetischeOperatoren . . . . . . . . . . . . . . 66
4.4.2.2 Bitoperatoren . . . . . . . . . . . . . . . . . . . . . . 68
4.4.2.3 Zuweisungsoperator . . . . . . . . . . . . . . . . . 70
4.4.2.4 VergleichsoperatorenundLogischeOperatoren . . 72
4.4.2.5 Inkrement-undDekrementoperatoren . . . . . . . 73
4.4.2.6 Priorita¨tundAuswertungsreihenfolgeder
Operatoren . . . . . . . . . . . . . . . . . . . . . . . 74
4.4.3 AllgemeineAusdru¨cke . . . . . . . . . . . . . . . . . . . . . 75
4.4.4 Ein-undAusgabe . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4.4.1 StatischerImportderIOTools-MethodeninJava5.0 78
4.4.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 79
4.4.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.5 AnweisungenundAblaufsteuerung . . . . . . . . . . . . . . . . . . 82
4.5.1 Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.5.2 Blo¨ckeundihreStruktur . . . . . . . . . . . . . . . . . . . . . 83
4.5.3 Entscheidungsanweisung . . . . . . . . . . . . . . . . . . . . 84
4.5.3.1 Dieif-Anweisung . . . . . . . . . . . . . . . . . . 84
4.5.3.2 Dieswitch-Anweisung . . . . . . . . . . . . . . . 86
4.5.4 Wiederholungsanweisungen,Schleifen . . . . . . . . . . . . 87
4.5.4.1 Diefor-Anweisung . . . . . . . . . . . . . . . . . . 88
4.5.4.2 Vereinfachtefor-Schleifen-NotationinJava5.0 . . 89
4.5.4.3 Diewhile-Anweisung . . . . . . . . . . . . . . . . 89
4.5.4.4 Diedo-Anweisung . . . . . . . . . . . . . . . . . . 90
4.5.4.5 Endlosschleifen . . . . . . . . . . . . . . . . . . . . 91
4.5.5 SprungbefehleundmarkierteAnweisungen . . . . . . . . . 92
4.5.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 94
4.5.7 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 94
5 Praxisbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.1 WorumgehtesindiesemKapitel? . . . . . . . . . . . . . . . . . . . 99
5.2 TeilbarkeitzumErsten . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.2.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.2.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 99
5.2.3 AlgorithmischeBeschreibung . . . . . . . . . . . . . . . . . . 100
5.2.4 ProgrammierunginJava . . . . . . . . . . . . . . . . . . . . . 101
5.2.5 Vorsicht,Falle! . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.2.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.3 TeilbarkeitzumZweiten . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.3.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.3.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 103
5.3.3 AlgorithmischeBeschreibung . . . . . . . . . . . . . . . . . . 104
5.3.4 ProgrammierunginJava . . . . . . . . . . . . . . . . . . . . . 104
5.3.5 Vorsicht,Falle! . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.3.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 106
5.4 Dreierlei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.4.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.4.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 108
5.4.3 AlgorithmischeBeschreibung . . . . . . . . . . . . . . . . . . 108
5.4.4 ProgrammierunginJava . . . . . . . . . . . . . . . . . . . . . 108
5.4.5 Vorsicht,Falle! . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.4.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 112
6 Referenzdatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1 Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1.1 WassindFelder? . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.1.2 Deklaration,ErzeugungundInitialisierungvonFeldern . . 123
6.1.3 FelderunbekannterLa¨nge . . . . . . . . . . . . . . . . . . . . 126
6.1.4 Referenzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.1.5 EinbessererTerminkalender . . . . . . . . . . . . . . . . . . 133
6.1.6 MehrdimensionaleFelder . . . . . . . . . . . . . . . . . . . . 134
6.1.7 MehrdimensionaleFelderunterschiedlicherLa¨nge . . . . . 138
6.1.8 Vorsicht,Falle:KopierenvonmehrdimensionalenFeldern . 140
6.1.9 Vereinfachtefor-Schleifen-NotationinJava5.0 . . . . . . . 141
6.1.10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 142
6.1.11 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.2 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.2.1 WassindKlassen? . . . . . . . . . . . . . . . . . . . . . . . . 147
6.2.2 DeklarationundInstantiierungvonKlassen . . . . . . . . . 148
6.2.3 KomponentenzugriffbeiObjekten . . . . . . . . . . . . . . . 149
6.2.4 EinerstesAdressbuch . . . . . . . . . . . . . . . . . . . . . . 150
6.2.5 KlassenalsReferenzdatentyp . . . . . . . . . . . . . . . . . . 152
6.2.6 FeldervonKlassen . . . . . . . . . . . . . . . . . . . . . . . . 155
6.2.7 Vorsicht,Falle:KopierenvongeschachteltenReferenzdaten-
typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
6.2.8 AuslagernvonKlassen. . . . . . . . . . . . . . . . . . . . . . 159
6.2.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 161
6.2.10 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 161
7 Methoden,Unterprogramme . . . . . . . . . . . . . . . . . . . . . . . . . 163
7.1 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
7.1.1 WassindMethoden? . . . . . . . . . . . . . . . . . . . . . . . 164
7.1.2 DeklarationvonMethoden . . . . . . . . . . . . . . . . . . . 165
7.1.3 Parameteru¨bergabeund-ru¨ckgabe . . . . . . . . . . . . . . . 166
7.1.4 AufrufvonMethoden . . . . . . . . . . . . . . . . . . . . . . 168
7.1.5 U¨berladenvonMethoden . . . . . . . . . . . . . . . . . . . . 169
7.1.6 VariableArgument-AnzahlbeiMethodeninJava5.0 . . . . 171
7.1.7 Vorsicht,Falle:ReferenzenalsParameter . . . . . . . . . . . 172
7.1.8 SichtbarkeitundVerdeckenvonVariablen . . . . . . . . . . 174
7.1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 176
7.1.10 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 176
7.2 RekursivdefinierteMethoden . . . . . . . . . . . . . . . . . . . . . . 177
7.2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
7.2.2 DasAchtdamenproblem . . . . . . . . . . . . . . . . . . . . . 179
7.2.2.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . 179
7.2.2.2 Lo¨sungsidee . . . . . . . . . . . . . . . . . . . . . . 180
7.2.2.3 ErsteVorarbeiten:DieMethodenausgabeund
bedroht . . . . . . . . . . . . . . . . . . . . . . . . 180
7.2.2.4 DieRekursion . . . . . . . . . . . . . . . . . . . . . 182
7.2.2.5 DieLo¨sung . . . . . . . . . . . . . . . . . . . . . . . 185
7.2.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 186
7.2.4 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 187
7.3 DieMethodemain . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
7.3.1 Kommandozeilenparameter. . . . . . . . . . . . . . . . . . . 187
7.3.2 Anwendungdervereinfachtenfor-Schleifen-Notationin
Java5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7.3.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 189
7.3.4 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 190
7.4 MethodenausanderenKlassenaufrufen. . . . . . . . . . . . . . . . 191
7.4.1 Klassenmethoden . . . . . . . . . . . . . . . . . . . . . . . . . 192
7.4.2 DieMethodenderKlassejava.lang.Math . . . . . . . . . 193
7.4.3 StatischerImportinJava5.0 . . . . . . . . . . . . . . . . . . . 194
7.5 MethodenvonObjektenaufrufen . . . . . . . . . . . . . . . . . . . . 195
7.5.1 Instanzmethoden . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.5.2 DieMethodenderKlassejava.lang.String . . . . . . . 196
7.6 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
8 Praxisbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.1 MastermindzumErsten . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.1.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.1.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 204
8.1.3 UnterteileneinerZahl . . . . . . . . . . . . . . . . . . . . . . 204
8.1.4 Gu¨ltigkeiteinerZahl . . . . . . . . . . . . . . . . . . . . . . . 205
8.1.5 Findeneinergu¨ltigenZahl . . . . . . . . . . . . . . . . . . . 206
8.1.6 AnzahlderTreffer . . . . . . . . . . . . . . . . . . . . . . . . 207
8.1.7 Ein-undAusgabe . . . . . . . . . . . . . . . . . . . . . . . . 208
8.1.8 ZumHauptprogramm . . . . . . . . . . . . . . . . . . . . . . 209
8.1.9 DaskompletteProgrammimU¨berblick . . . . . . . . . . . . 210
8.2 MastermindzumZweiten . . . . . . . . . . . . . . . . . . . . . . . . 213
8.2.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 213
8.2.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 213
8.2.3 VerwendeteDatenstrukturen . . . . . . . . . . . . . . . . . . 213
8.2.4 VergleichderVersuche . . . . . . . . . . . . . . . . . . . . . . 214
8.2.5 ZumHauptprogramm . . . . . . . . . . . . . . . . . . . . . . 215
8.2.6 DaskompletteProgrammimU¨berblick . . . . . . . . . . . . 216
8.3 BlackJack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.3.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.3.2 AnalysedesProblems . . . . . . . . . . . . . . . . . . . . . . 219
8.3.3 MischeneinesKartenspiels . . . . . . . . . . . . . . . . . . . 221
8.3.4 DiePflichtendesGebers . . . . . . . . . . . . . . . . . . . . . 221
8.3.5 ZumHauptprogramm . . . . . . . . . . . . . . . . . . . . . . 223
8.3.6 DaskompletteProgrammimU¨berblick . . . . . . . . . . . . 226
8.3.7 U¨bungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 229
II ObjektorientiertesProgrammiereninJava 231
9 DieobjektorientiertePhilosophie . . . . . . . . . . . . . . . . . . . . . . 235
9.1 DieWelt,inderwirleben . . . . . . . . . . . . . . . . . . . . . . . . 235
9.2 Programmierparadigmen–ObjektorientierungimVergleich . . . . 236
9.3 DievierGrundpfeilerobjektorientierterProgrammierung. . . . . . 238
9.3.1 Generalisierung . . . . . . . . . . . . . . . . . . . . . . . . . . 239
9.3.2 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
9.3.3 Kapselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
9.3.4 Polymorphismus . . . . . . . . . . . . . . . . . . . . . . . . . 245
9.3.5 WeiterewichtigeGrundbegriffe. . . . . . . . . . . . . . . . . 246
9.4 Modellbildung–vonderrealenWeltindenComputer . . . . . . . 247
Description:"Java selbst, dass ist nicht schwer, Programmieren lernen umso mehr". Das mag wohl sein, doch hängt es immer auch vom Lehrer ab -- Dietmar Ratz, Jens Scheffler und Detlef Seese und der neu hinzu gekommene Jan Wiesenberger jedenfalls haben das richtige Konzept und die passende Umsetzung für ein meh