Dietmar Ratz, Jens Scheffler, Detlef Seese, Jan Wiesenberger
Grundkurs Programmieren in Java
Band 1: Der Einstieg in Programmierung und Objektorientierung (4. Auflage, Carl Hanser Verlag, 2007)
Band 2: Einführung in die Programmierung kommerzieller Systeme (2. Auflage, Carl Hanser Verlag, 2006)

Beispielprogramme aus Band 1

Hier finden Sie die Beispielprogramme aus dem Buch. Suchen Sie einfach anhand des Inhaltsverzeichnisses die Stelle, an der sich das Programm im Buch befindet, und navigieren Sie über den Link in den entsprechenden Teil des Dokuments.

Alle Beispiele zum Download (zip)

Inhaltsverzeichnis


3.1: Mein erstes Programm
Berechnung.java Gibt die Summe zweier Zahlen auf dem Bildschirm aus.

4.1.10: Übungsaufgaben
Berechnung.java Fehlerhafte Berechnungs-Klasse aus den Übungsaufgaben.

4.2.2: Ausgaben auf der Konsole
HalloWelt.java Das wohl berühmteste Einsteiger-Programm der Programmiergeschichte.

4.2.4: Schöner Programmieren in Java
Unsorted.java Dieses Programm ist ein Beispiel dafür, wie das Einhalten weniger Formatierungsregeln die Lesbarkeit von Code steigert.
   Version A Nicht formatierte Version.
   Version B Gemäss der Richtlinien überarbeitete Version.

4.2.6: Übungsaufgaben
Strukturuebung.java Übungsaufgabe zu den Coding-Richtlinien

4.3.1: Ganzzahlige Datentypen
Longtst.java

4.3.2: Gleitkommatypen
Floatdiv.java Division bei Gleitkommazahlen
Intdiv.java Division bei ganzen Zahlen
   Version A Division ohne Rest
   Version B Division mit Rest

4.4.1: Variablen
StundenRechner1.java Stundenlohn-Berechnung ohne Variablen
StundenRechner2.java Stundenlohn-Berechnung unter Verwendung von Variablen

4.4.4: Ein- und Ausgabe
IOToolsTest.java Beispielprogramm für die Eingabe über Tastatur

4.4.4.1: Statischer Import der IOTools-Methoden
IOToolsTestMitStaticImport.java Beispielprogramm für die Eingabe über Tastatur (mit statischem Import der Methoden)

4.4.6: Übungsaufgaben
Plus.java Übungsaufgabe zur Verwendung von Operatoren
Raviolita.java Programm mit Lücken

4.5.7: Übungsaufgaben
Falsch.java Übungsaufgabe
Quersumme.java Übungsaufgabe

5.2: Teilbarkeit zum ersten
Teilbarkeit1.java Teile eine dreistellige Zahl in ihre Ziffern auf. Das Programm verwendet hierzu drei if-Abfragen.

5.3: Teilbarkeit zum zweiten
Teilbarkeit2.java Teile eine dreistellige Zahl in ihre Ziffern auf. Das Programm verwendet hierzu eine for-Schleife. Es funktioniert somit auch mit mehr als drei Ziffern.

5.4: Dreierlei
ThreeGuys.java Das Fußballproblem.

6.1: Felder
UmstaendlicherKalender.java Dieses Programm zeigt, wie ein Terminkalender ohne Verwendung von Feldern nur schwer programmiert werden kann.

6.1.3: Felder unbekannter Länge
Swap.java Vertauscht ein Feld von Zahlen.

6.1.4: Referenzen
Doppel.java Das Programm verdoppelt eine einzelne Zahl.
DoppelFeld.java Das Programm verdoppelt ein Feld von Zahlen.

6.1.5: Ein besserer Terminkalender
BessererKalender.java Kalenderprogramm unter Verwendung von Arrays.

6.1.6: Mehrdimensionale Felder
MonatsKalender.java Das Kalenderprogramm, gültig für einen ganzen Monat.

6.1.9: Vereinfachte for-Schleifen-Notation
MehrSchleifen.java Traditionelle und neue, vereinfachte Schleifen-Notation mehrdimensional
Schleifen.java Traditionelle und neue, vereinfachte Schleifen-Notation eindimensional

6.2.4: Ein erstes Adressbuch
AdressBuch_v1.java Eine einfache Adressverwaltung. Funktioniert nur mit einer Adresse.

6.2.5: Klassen als Referenzdatentyp
AdressBuch_v2.java Eine einfache Adressverwaltung für zwei Adressen.

6.2.6: Felder von Klassen
AdressBuch_v3.java Eine einfache Adressverwaltung für zwanzig Adressen.

6.2.8: Auslagern von Klassen
Adresse.java Die Adresse, in eine eigene Java-Datei ausgelagert.

6.2.10: Übungsaufgaben
Komponente.java Übungsaufgabe
Referenzen.java Übungsaufgabe

7.1: Methoden
Eval1.java Das Programm führt eine simple Berechnung aus (Potenz).
Eval2.java Das Programm führt dieselbe Berechnung wie Eval1 aus, jedoch mehr als einmal. Der Code bläht sich entsprechend auf.

7.1.4: Aufruf von Methoden
AufrufTest.java Was passiert, wenn wir den Inhalt von übergebenen Parametern in der Methode abändern?

7.1.6: Vorsicht Falle!
Argumente.java Summationsmethode mit variabler Argumentliste

7.1.7: Sichtbarkeit und Verdecken von Variablen
AufrufTest2.java Vorsicht Falle: Übergabe von Arrays an Methoden.
AufrufTest3.java Explizites Kopieren von Feldinhalten.

7.1.8: Zusammenfassung
VerdeckenTest.java Verdecken von Variablen beim Methodenaufruf.

BooleanMethods.java Übungsaufgabe

7.2.1: Motivation
Unendlichkeit.java Was passiert, wenn Methoden sich selbst aufrufen?

7.2.2: Das Achtdamenproblem
Achtdamen.java Das Programm löst die Aufgabe, acht Damen so auf dem Feld zu plazieren, dass sie sich nicht gegenseitig schlagen können.

7.3.1: Kommandozeilenparameter
GrussWort.java Das Programm liest Kommandozeilenparameter aus und verwertet sie in einem Gruss.

7.3.4: Übungsaufgaben
Signatur.java Übungsaufgabe

7.4.1: Klassenmethoden
MeineMethoden.java Klasse, die Methoden bereitstellt
TesteMethoden.java Klasse, die die Methoden der Klasse verwendet

7.4.3: Statischer Import
StatischeImports.java Klasse, die statisch importierte Math-Methoden benutzt

7.5.1: Instanzmethoden
Multiplizierer.java Klasse mit Instanzvariable und Instanzmethode
TesteMultiplizierer.java Klasse, die Instanzmethoden von verschiedenen Objekten einsetzt

7.5.2: Die Methoden der Klasse java.lang.String
StringTest.java Einige Beispiele für den Umgang mit Strings.

7.6: Übungsaufgaben
Tausche.java Übungsaufgabe

8.1: Mastermind zum ersten
Mastermind.java Eine Realisierung des Mastermind-Spiels.

8.2: Mastermind zum zweiten
Masterguess.java Dieses Programm kann im Mastermind-Spiel die Zahl in weniger als 10 Zügen erraten.

8.3: Black Jack
Blackjack.java Das altbekannte 17 und 4.

9.3.1: Generalisierung
FaxAdresse.java Erweiterung des Adress-Objektes.

10.1: Vom Referenzdatentyp zur Objektorientierung
Student.java Studenten-Klasse, erster Versuch.

10.2.1: Zugriffsrechte
Student.java Aus Gründen der Kapselung wurden die Instanzvariablen auf private gesetzt.

10.2.2: Was sind Instanzmethoden?
Student.java Der Zugriff auf private Bestandteile der Klasse wird durch Methoden gekapselt.

10.2.3: Instanzmethoden zur Validierung von Eingaben
Student.java Die Matrikelnummer kann auf Gültigkeit geprüft werden.

10.2.4: Instanzmethoden als erweiterte Funktionalität
Student.java Die Klasse besitzt jetzt eine toString-Methode.

10.3.1: Klassenvariablen und -methoden
Student.java Neuer Bestandteil: ein Instanzzähler.

10.3.2: Konstanten
Student.java Konstanten definieren die Studienfächer.

10.4.1: Konstruktoren
Student.java Neu: ein selbstdefinierter argumentloser Konstruktor.

10.4.2: Überladen von Konstruktoren
Student.java Die Studenten-Klasse, diesmal mit zwei Konstruktoren.
   Version A Beide Konstruktoren sind unabhängig voneinander definiert.
   Version B Ein Konstruktor setzt mit Hilfe des Schlüsselwortes this auf dem anderen auf.

10.4.3: Der statische Initialisierer
Student.java Das Phantom der Uni - erzeugt durch einen statischen Initialisierer.

10.4.4: Der Mechanismus der Objekterzeugung
Student.java Die Klasse Student
Sub.java Subklasse für den Test der Aufrufreihenfolge beim Erzeugen von Objekten.
Super.java Superklasse für den Test der Aufrufreihenfolge beim Erzeugen von Objekten.

10.6: Übungsaufgaben
AchJa.java
Fehler1.java
Fehler2.java
Fehler3.java
Fehler4.java
Fehler5.java
Fehler6.java
Fuchs.java
Glasboden.java
Hund.java
IntKlasse.java
KarlsruherStudent.java
Katze.java
Klang.java
KlassenTest.java
Krach.java
Maus.java
Musik.java
Patient.java
Ratte.java
RefIntKlasse.java
Reifen.java
TennisSpieler.java
TestStrecke.java
TestZwei.java

11.1.3: Ein erster Ansatz
USDollar.java Eine erste, konkrete Währung.
Waehrung.java Diese Klasse stellt allgemein Geldwerte dar.

11.1.4: Eine Klasse für sich
Yen.java Die japanische Währung.

11.1.6: Übungsaufgaben
Euro.java Die europäische Währung.

11.2: Die super-Referenz
NonsensDollar.java Klasse mit einer völlig unsinnig überschriebenen Methode ;-)

11.3: Überschreiben von Methoden und Variablen
Sohn.java Test: Überschreiben von Variablen und Methoden.
Vater.java Test: Überschreiben von Variablen und Methoden.

11.6: Abstrakte Klassen und Interfaces
Goldbarren.java Ein simpler Wertgegenstand.
Kruegerrand.java Eine Klasse, die sowohl Waehrung als auch Wertgegenstand ist.
Waehrung.java Die Klasse Waehrung, erweitert um einige Methoden.
Wertgegenstand.java Dieses Interface repräsentiert einen Wertgegenstand.

11.7: Übungsaufgaben
KreisPlot.java Übungsaufgabe: Zeichnen von Kreisen.

11.8.3: Innere Klassen
Aufzaehlung.java Mit Hilfe einer Folge wird durch eine Ansammlung von Objekten iteriert.
   Version A Klasse vor der Definition der Aufzahlungsklasse.
   Version B Klasse mit Folge als innere Klasse.
Folge.java Interface fuer die Festlegung der Methoden zur Abarbeitung der Elemente

11.8.4: Anonyme Klassen
Aufzaehlung.java Hier wurde die Folge in einer anonymen Klasse erzeugt.

11.10: Übungsaufgaben
A.java
ABCD.java
B.java
Bildschirm.java
Brot.java
C.java
D.java
Mahlzeit.java
MetallPlatte.java
Mittagessen.java
Point.java
Salat.java
Sandwich.java
SpielFigur.java
Vesper.java
Wurst.java

12.1: Streng geheim
CodingDemo.java Einfaches Verschlüsselungsprogramm, welches Encoder-Objekte verwendet.
Encoder.java Die Schnittstelle des Verschlüsselungsmechanismus.
Inflater.java Verschlüsseln durch Aufblähen.
XorEncoder.java XOR-Verschlüsselung.

12.2: Mastermind zum dritten
MasterGame.java Eine grafische Oberfläche für das Mastermind-Spiel.

12.3: Game of Life
Life.java Hauptprogramm: Game of Life.
Petrischale.java Der Zustand der Zellkultur zu einem bestimmten Zeitpunkt.
Zelle.java Eine einzelne Zelle im Zellverbund.

13: Exceptions und Errors
Excep1.java Ein sehr einfaches Programm, welches aber bereits eine Exception produzieren kann.

13.1.3: Abfangen von Exceptions
Excep2.java Die bei Division durch 0 auftrende Exception wird abgefangen.

13.1.4: Ein Anwendungsbeispiel
Mittelwert.java Das Programm liest Zahlen aus einer Datei ein und berechnet den Mittelwert.

13.1.6: Übungsaufgaben
Exueb1.java
Exueb2.java
Exueb3.java
Exueb4.java
Exueb5.java
Exueb6.java
Exueb7.java

13.2.1: Definieren eigener Exceptions
InputException.java Ausnahme fuer Kommunikationsprobleme mit der Tastatur
KeyTools.java Diese kleine Klasse macht den IOTools Konkurrenz ;-)

13.2.3: Vererbung und Exceptions
PingException.java Die Ping-Exception
PingPong.java Ein Programm, welches Exceptions auslöst.
   Version A Jede Exception wird in einem eigenen try-catch-Block behandelt.
   Version B Nur ein try-catch-Block für alle drei Exceptions.
PingPongException.java Die PingPong-Exception
PongException.java Die Pong-Exception

13.2.4: Vorsicht, Falle!
PingPong.java Ein Programm, welches Exceptions auslöst.
   Version A Die PingPongException wird vor der PongException gefangen.
   Version B Die PongException wird vor der PingPongException gefangen.

13.2.5: Der finally-Block
PingPong.java Ein Programm, welches Exceptions auslöst.
   Version A Alle Exceptions ausser der PongException werden weitergeleitet.
   Version B Das Betreten und verlassen des "kritischen Bereichs" wird durch Ausgaben auf die Konsole gekennzeichnet.
   Version C Die Meldung des "Verlassens" wandert in den try-Block.
   Version D Die Meldung des "Verlassens" wird dupliziert: sie steht sowohl im catch-Block als auch nach der try-catch-Anweisung
   Version E Die wahrhaft elegante Lösung: die Ausgabe erscheint im finally-Block.

13.2.8: Übungsaufgaben
Exueb8.java

13.3.1: Zusicherungen im Programmcode
AssertionTest.java Methode kehrwert mit einer Zusicherung

14.1.1: Deklaration eines Aufzählungstyps
Jahreszeit.java Die vier Jahreszeiten als enum-Typ

14.1.2: Instanzmethoden der enum-Objekte
Aufzaehlungen.java Verwendung des Jahreszeiten-enum-Typs

14.1.3: Selbstdefinierte Instanzmethoden für enum-Objekte
Enumerations.java Verwendung des Noten-Typs
Noten.java Die Noten auf der Klavier-Tastatur

14.1.4: Übungsaufgaben
EsWarEinmal.java Das Maerchen-Programm zu Aufgabe 14.3
StudentenTest.java Test-Klasse für Aufgabe 14.1
StudentenTest2.java Test-Klasse für Aufgabe 14.2

14.2.1: Generizität in alten Java-Versionen
Ohrring.java Simple Klasse fuer Ohrring-Objekte
Paar.java Klasse für Paare vom Typ Object
PaarTest1.java Testprogramm 1 fuer die Paar-Klasse
PaarTest2.java Testprogramm 2 fuer die Paar-Klasse
Socke.java Simple Klasse fuer Socken-Objekte

14.2.2: Generizität ab Java 5.0
GenPaar.java Generische Paar-Klasse
GenPaarTest1.java Tesprogramm 1 für die generische Paar-Klasse
GenPaarTest2.java Tesprogramm 2 für die generische Paar-Klasse

14.2.3: Einschränkungen der Typ-Parameter
Hemd.java Simple Klasse für Hemden-Objekte
Hose.java Simple Klasse für Hosen-Objekte
Kleidung.java Simple Klasse für Kleidungs-Objekte
TollesPaar.java Generische Paar-Klasse mit eingeschraenktem Typ-Parameter
TollesPaarTest.java Testprogramm für die Klasse TollesPaar

14.2.4: Wildcards
TollesPaarTestWild1.java Testprogramm ohne Wildcards fuer die Klasse TollesPaar
TollesPaarTestWild2.java Testprogramm mit Wildcards fuer die Klasse TollesPaar

14.2.5: Bounded Wildcards
GenPaarTestWild1.java Testprogramm 1 für die GenPaar-Klasse mit Bounded Wildcard
GenPaarTestWild2.java Testprogramm 2 für die GenPaar-Klasse mit Bounded Wildcard
GenPaarTestWild3.java Testprogramm 3 für die GenPaar-Klasse mit Bounded Wildcard
Jeans.java Simple Klasse fuer Jeans-Objekte

14.2.6: Generische Methoden
GenPaarTest3.java Testprogramm mit generischen Methoden
GenPaarTest5.java Testprogramm mit generischen Methoden und eingeschränkten Typ-Parametern

14.2.8: Übungsaufgaben
Konzert.java Programm zu Aufgabe 14.7
RateMal.java Programm zu Aufgabe 14.6
TierKaefig.java Programm zu Aufgabe 14.4
Tierleben.java Programm zu Aufgabe 14.5

15.1: Collections
Namensliste.java Liest eine beliebige Menge von Namen von der Tastatur und gibt sie verkehrt herum wieder aus.

15.2: Sortieren von Feldern
Ring.java Eine nach Größe sortierbare Ringklasse.
RingDemo.java Erzeugt zehn zufaellige Ringe und sortiert sie.

15.3: Grafische Oberflächen in Java
MeinDrittesFenster.java Erzeuge ein einfaches Fenster auf dem Bildschirm, das einen Button und einen Label besitzt.
MeinErstesFenster.java Erzeuge ein einfaches Fenster auf dem Bildschirm
MeinZweitesFenster.java Erzeuge ein einfaches Fenster auf dem Bildschirm, das einen Button besitzt.

  Letzte Bearbeitung: 17.08.2007 (R. Küstermann)