Compare commits

...

3 Commits
main ... main

Author SHA1 Message Date
Thomas Smits cfda43bb03 Update of exercises 2026-01-13 14:16:55 +01:00
Thomas Smits 7811de699d Update of exercises 2026-01-13 14:16:34 +01:00
Thomas Smits 0c8383fd67 Update of exercises 2026-01-13 14:14:02 +01:00
288 changed files with 7954 additions and 170 deletions

View File

@ -1,6 +1,6 @@
# Abstrakte Klassen # Abstrakte Klassen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten. Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten.

View File

@ -1,6 +1,6 @@
# Abstrakte Klasse # Abstrakte Klasse
## Lernziel ## Lernziel
[Musterlösung](solution/)
Abstrakte Klasse verwenden. Abstrakte Klasse verwenden.

View File

@ -1,6 +1,6 @@
# Ausnahmen testen # Ausnahmen testen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Bei einer gegebenen Klasse Testfälle mit JUnit schreiben, die auf das Werfen von Ausnahmen testen. Bei einer gegebenen Klasse Testfälle mit JUnit schreiben, die auf das Werfen von Ausnahmen testen.

View File

@ -1,6 +1,6 @@
# Eigene Ausnahmen schreiben und an entsprechender Stelle werfen # Eigene Ausnahmen schreiben und an entsprechender Stelle werfen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Ausnahmen programmieren und sinnvoll einsetzen. Bedeutung der Schlüsselwörter `throws` und `throw` verstehen. Ausnahmen programmieren und sinnvoll einsetzen. Bedeutung der Schlüsselwörter `throws` und `throw` verstehen.

View File

@ -1,6 +1,6 @@
# Eigene Exception schreiben # Eigene Exception schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eigene Exceptions entwerfen und verwenden. Eigene Exceptions entwerfen und verwenden.

View File

@ -1,6 +1,6 @@
# Handle-or-Declare-Regel anwenden # Handle-or-Declare-Regel anwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
In einem vorhandenen Programm die Ausnahmen korrekt weiter deklarieren und an den richtigen Stellen fangen. In einem vorhandenen Programm die Ausnahmen korrekt weiter deklarieren und an den richtigen Stellen fangen.

View File

@ -1,6 +1,6 @@
# Ausnahmen mit `try` und `catch` behandeln. # Ausnahmen mit `try` und `catch` behandeln.
## Lernziel ## Lernziel
[Musterlösung](solution/)
Vorhandene Ausnahmen mit `try` und `catch` abfangen und behandeln. Vorhandene Ausnahmen mit `try` und `catch` abfangen und behandeln.

View File

@ -1,6 +1,6 @@
# Iterator schreiben # Iterator schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Für eine gegebene Klasse einen Iterator schreiben. Für eine gegebene Klasse einen Iterator schreiben.

View File

@ -1,6 +1,6 @@
# Iterator programmieren # Iterator programmieren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Iteratoren verstehen und programmieren. Iteratoren verstehen und programmieren.

View File

@ -1,6 +1,6 @@
# `List<T>` und dessen Implementierungen # `List<T>` und dessen Implementierungen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Das Interface `List<T>` und eine passende Implementierung einsetzen. Das Interface `List<T>` und eine passende Implementierung einsetzen.

View File

@ -1,6 +1,6 @@
# `Map<T>` verwenden # `Map<T>` verwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Das Interface `Map<T>` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten. Das Interface `Map<T>` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten.

View File

@ -1,6 +1,6 @@
# ReverserGeneric # ReverserGeneric
## Lernziel ## Lernziel
[Musterlösung](solution/)
`Comparable` verstehen und nutzen. `Comparable` verstehen und nutzen.

View File

@ -1,6 +1,6 @@
# Strings umgekehrt sortieren: Reverser # Strings umgekehrt sortieren: Reverser
## Lernziel ## Lernziel
[Musterlösung](solution/)
`Comparable` verstehen und nutzen. `Comparable` verstehen und nutzen.

View File

@ -1,6 +1,6 @@
# `Set<T>` und dessen Implementierungen # `Set<T>` und dessen Implementierungen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Das Interface `Set<T>` und eine passende Implementierung einsetzen. Das Interface `Set<T>` und eine passende Implementierung einsetzen.

View File

@ -1,6 +1,6 @@
# CommandLineSorter # CommandLineSorter
## Lernziel ## Lernziel
[Musterlösung](solution/)
Sortieren von Collections. Sortieren von Collections.

View File

@ -1,6 +1,6 @@
# CommandLineSorter -- Version 2 # CommandLineSorter -- Version 2
## Lernziel ## Lernziel
[Musterlösung](solution/)
Sortieren von Collections. Sortieren von Collections.

View File

@ -1,6 +1,6 @@
# `Comparator<T>` verwenden und Objekte sortieren # `Comparator<T>` verwenden und Objekte sortieren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator<T>` realisieren. Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator<T>` realisieren.

View File

@ -1,6 +1,6 @@
# Wörterbuchprogramm # Wörterbuchprogramm
## Lernziel ## Lernziel
[Musterlösung](solution/)
Interface `Map` und seine Implementierungen einsetzen. Interface `Map` und seine Implementierungen einsetzen.

View File

@ -1,6 +1,6 @@
# Eigene Enumeration schreiben und verwenden # Eigene Enumeration schreiben und verwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen.

View File

@ -1,6 +1,6 @@
# Enumeration schreiben # Enumeration schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen.

View File

@ -1,6 +1,6 @@
# Singleton-Eigenschaft von Enumerationen # Singleton-Eigenschaft von Enumerationen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Die Singleton-Eigenschaft von Enumerationen verstehen. Die Singleton-Eigenschaft von Enumerationen verstehen.

View File

@ -1,6 +1,6 @@
# Assignment: Stein, Papier, Schere, Echse, Spock # Assignment: Stein, Papier, Schere, Echse, Spock
## Lernziel ## Lernziel
[Musterlösung](solution/)
Mit Enumerationen arbeiten. Mit Enumerationen arbeiten.

View File

@ -1,6 +1,6 @@
# Einen generischen Typ schreiben # Einen generischen Typ schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einen vorhandenen Typ so umgestalten, dass er als generischer Typ verwendet werden kann. Einen vorhandenen Typ so umgestalten, dass er als generischer Typ verwendet werden kann.

View File

@ -1,6 +1,6 @@
# Generische Klasse Pair schreiben # Generische Klasse Pair schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Von einem generischen Typ erben. Von einem generischen Typ erben.

View File

@ -1,6 +1,6 @@
# Generische Klasse Pair erweitern: NumberPair # Generische Klasse Pair erweitern: NumberPair
## Lernziel ## Lernziel
[Musterlösung](solution/)
Von einem generischen Typ erben. Von einem generischen Typ erben.

View File

@ -1,6 +1,6 @@
# Generische Klasse Pair erweitern: SamePair # Generische Klasse Pair erweitern: SamePair
## Lernziel ## Lernziel
[Musterlösung](solution/)
Von einem generischen Typ erben. Von einem generischen Typ erben.

View File

@ -1,6 +1,6 @@
# PairList # PairList
## Lernziel ## Lernziel
[Musterlösung](solution/)
Sammlungen von Objekten eines generischen Typs erstellen. Sammlungen von Objekten eines generischen Typs erstellen.

View File

@ -1,6 +1,6 @@
# Wildcard benutzen # Wildcard benutzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Wildcards einsetzen. Wildcards einsetzen.

View File

@ -1,6 +1,6 @@
# Generische Queue # Generische Queue
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einen komplexeren generischen Typ entwickeln. Einen komplexeren generischen Typ entwickeln.

View File

@ -1,6 +1,6 @@
# `super` und `extends` einsetzen # `super` und `extends` einsetzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Methoden unter Verwendung von `super` und `extends` gestalten, sodass sie flexibel auch mit Sub- bzw. Supertypen umgehen können. Methoden unter Verwendung von `super` und `extends` gestalten, sodass sie flexibel auch mit Sub- bzw. Supertypen umgehen können.

View File

@ -1,6 +1,6 @@
# Generische Typen zusammen mit Wildcards einsetzen # Generische Typen zusammen mit Wildcards einsetzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Gebundene und ungebundene Wildcards einsetzen. Gebundene und ungebundene Wildcards einsetzen.

View File

@ -1,6 +1,6 @@
# MatrixSuche # MatrixSuche
## Lernziel ## Lernziel
[Musterlösung](solution/)
Statische innere Klassen einsetzen. Statische innere Klassen einsetzen.

View File

@ -1,6 +1,6 @@
# Innere Klasse Beobachter # Innere Klasse Beobachter
## Lernziel ## Lernziel
[Musterlösung](solution/)
Zugriff von inneren Klassen auf die umgebende Klasse. Zugriff von inneren Klassen auf die umgebende Klasse.

View File

@ -1,6 +1,6 @@
# Callback mit anonymer Klasse realisieren # Callback mit anonymer Klasse realisieren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert. Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert.

View File

@ -1,6 +1,6 @@
# `BufferedReader` zum zeilenweisen Lesen einsetzen # `BufferedReader` zum zeilenweisen Lesen einsetzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Daten Zeilenweise mit einem `BufferedReader` verwenden und dabei das Decorator Pattern einsetzen. Daten Zeilenweise mit einem `BufferedReader` verwenden und dabei das Decorator Pattern einsetzen.

View File

@ -1,6 +1,6 @@
# DataOutputStream # DataOutputStream
## Lernziel ## Lernziel
[Musterlösung](solution/)
Daten mit einem `DataOutputStreams` manuell serialisieren. Daten mit einem `DataOutputStreams` manuell serialisieren.

View File

@ -1,6 +1,6 @@
# DataOutputStream durch Serialisierung ersetzen # DataOutputStream durch Serialisierung ersetzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Daten mit einem `ObjectOutputStreams` serialisieren. Daten mit einem `ObjectOutputStreams` serialisieren.

View File

@ -1,6 +1,6 @@
# Daten mit `DataOutputStream` und `DataInputStream` verarbeiten # Daten mit `DataOutputStream` und `DataInputStream` verarbeiten
## Lernziel ## Lernziel
[Musterlösung](solution/)
Ein eigenes Format für die Daten einer Klasse definieren und diese Dann in einer Datei speichern und aus dieser wieder laden. Ein eigenes Format für die Daten einer Klasse definieren und diese Dann in einer Datei speichern und aus dieser wieder laden.

View File

@ -1,6 +1,6 @@
# Daten mit einem `InputStream` lesen # Daten mit einem `InputStream` lesen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einen `InputStream` benutzen, um Daten aus einer Datei zu lesen. Einen `InputStream` benutzen, um Daten aus einer Datei zu lesen.

View File

@ -1,6 +1,6 @@
# Daten mit einem `OutputStream` schreiben # Daten mit einem `OutputStream` schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einen `OutputStream` verwenden, um Daten zu schreiben. Einen `OutputStream` verwenden, um Daten zu schreiben.

View File

@ -1,6 +1,6 @@
# Filesystem-Abstraktion mit `File` # Filesystem-Abstraktion mit `File`
## Lernziel ## Lernziel
[Musterlösung](solution/)
Die Klasse `Path` einsetzen, um plattformunabhängig Operationen auf dem Dateisystem durchzuführen. Die Klasse `Path` einsetzen, um plattformunabhängig Operationen auf dem Dateisystem durchzuführen.

View File

@ -1,6 +1,6 @@
# Fileattribute lesen # Fileattribute lesen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Methoden der Klassen `Path` und `Files` nutzen und verstehen. Methoden der Klassen `Path` und `Files` nutzen und verstehen.

View File

@ -1,6 +1,6 @@
# `FilterReader` # `FilterReader`
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einen eigenen Filter in Form eines `FilterReaders` programmieren und hiermit in den Datenstrom eingreifen. Einen eigenen Filter in Form eines `FilterReaders` programmieren und hiermit in den Datenstrom eingreifen.

View File

@ -1,6 +1,6 @@
# Konsolen Input/Output # Konsolen Input/Output
## Lernziel ## Lernziel
[Musterlösung](solution/)
Daten von der Konsole lesen und über eine Ausgabeumlenkung in eine Datei umlenken. `PrintStream` und `InputStreamReader` einsetzen. Daten von der Konsole lesen und über eine Ausgabeumlenkung in eine Datei umlenken. `PrintStream` und `InputStreamReader` einsetzen.

View File

@ -1,6 +1,6 @@
# Zeilen einer Textdatei zählen # Zeilen einer Textdatei zählen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Dateien zeilenweise lesen und verarbeiten. Dateien zeilenweise lesen und verarbeiten.

View File

@ -1,6 +1,6 @@
# `RandomAccessFile` # `RandomAccessFile`
## Lernziel ## Lernziel
[Musterlösung](solution/)
`RandomAccessFile` sowohl zum Lesen, als auch zum Schreiben von Daten einsetzen. Verstehen, dass man sich wahlfrei durch die Datei bewegen kann. `RandomAccessFile` sowohl zum Lesen, als auch zum Schreiben von Daten einsetzen. Verstehen, dass man sich wahlfrei durch die Datei bewegen kann.

View File

@ -1,6 +1,6 @@
# `Reader` verwenden # `Reader` verwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Textdaten mithilfe von `Reader` verarbeiten. Textdaten mithilfe von `Reader` verarbeiten.

View File

@ -1,6 +1,6 @@
# Rot13-Verschlüsselung # Rot13-Verschlüsselung
## Lernziel ## Lernziel
[Musterlösung](solution/)
Funktionsweise und Einsatz von Filtern. Funktionsweise und Einsatz von Filtern.

View File

@ -1,6 +1,6 @@
# Datei zerhacken # Datei zerhacken
## Lernziel ## Lernziel
[Musterlösung](solution/)
Daten byteweise aus einem Stream lesen. Daten byteweise aus einem Stream lesen.

View File

@ -1,6 +1,6 @@
# Serialisierung # Serialisierung
## Lernziel ## Lernziel
[Musterlösung](solution/)
Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden. Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden.

View File

@ -1,6 +1,6 @@
# Comparable implementieren # Comparable implementieren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Klasse "comparable" machen. Klasse "comparable" machen.

View File

@ -1,6 +1,6 @@
# Interface Stack entwerfen # Interface Stack entwerfen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Ein Interface entwerfen und dieses dann implementieren. Ein Interface entwerfen und dieses dann implementieren.

View File

@ -1,6 +1,6 @@
# Interface: Uebersetzer # Interface: Uebersetzer
## Lernziel ## Lernziel
[Musterlösung](solution/)
Ein Interface implementieren. Ein Interface implementieren.

View File

@ -1,6 +1,6 @@
# Interfaces anwenden und entwerfen # Interfaces anwenden und entwerfen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen. Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen.

View File

@ -1,6 +1,6 @@
# StringTransmogrifier # StringTransmogrifier
## Lernziel ## Lernziel
[Musterlösung](solution/)
Funktionale Interfaces entwerfen und verwenden. Funktionale Interfaces entwerfen und verwenden.

View File

@ -1,6 +1,6 @@
# StringTransmogrifier erweitern # StringTransmogrifier erweitern
## Lernziel ## Lernziel
[Musterlösung](solution/)
Funktionale Interfaces entwerfen und verwenden. Funktionale Interfaces entwerfen und verwenden.

View File

@ -1,6 +1,6 @@
# Deep-Copy mit `clone()` # Deep-Copy mit `clone()`
## Lernziel ## Lernziel
[Musterlösung](solution/)
Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen.

View File

@ -1,6 +1,6 @@
# Clone # Clone
## Lernziel ## Lernziel
[Musterlösung](solution/)
Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen.

View File

@ -1,6 +1,6 @@
# `equals()` und `hashCode()` implementieren und nutzen # `equals()` und `hashCode()` implementieren und nutzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen.

View File

@ -1,6 +1,6 @@
# equals und hashCode # equals und hashCode
## Lernziel ## Lernziel
[Musterlösung](solution/)
Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen.

View File

@ -1,6 +1,6 @@
# `toString()`-Methode implementieren # `toString()`-Methode implementieren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen. Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen.

View File

@ -1,6 +1,6 @@
# Optimierung bei Integer # Optimierung bei Integer
## Lernziel ## Lernziel
[Musterlösung](solution/)
Wrapper-Klassen und deren Optimierungen verstehen. Wrapper-Klassen und deren Optimierungen verstehen.

View File

@ -1,6 +1,6 @@
# Methoden der Wrapper-Klassen # Methoden der Wrapper-Klassen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Wrapper-Klassen nutzen, um Zahlen umzuwandeln. Wrapper-Klassen nutzen, um Zahlen umzuwandeln.

View File

@ -0,0 +1,5 @@
# Lösung: Klasse per Reflection analysieren
Musterlösung:
[pr2.reflection.analyzer](../../solutions/src/main/java/pr2/reflection/analyzer/)

View File

@ -0,0 +1,5 @@
# Lösung: Objekte per Reflection erzeugen
Musterlösung:
[pr2.reflection.reflector](../../solutions/src/main/java/pr2/reflection/reflector/)

View File

@ -1,6 +1,6 @@
# Fakultät parallel berechnen # Fakultät parallel berechnen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Berechnungen parallelisieren. Berechnungen parallelisieren.

View File

@ -1,6 +1,6 @@
# Thread per interrupt beenden # Thread per interrupt beenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Threads kontrolliert beenden. Threads kontrolliert beenden.

View File

@ -1,6 +1,6 @@
# wait und notify benutzen # wait und notify benutzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Thread-Koordination über Condition-Variablen. Thread-Koordination über Condition-Variablen.

View File

@ -1,6 +1,6 @@
# Parallele Ausgaben erzeugen # Parallele Ausgaben erzeugen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Erste Schritte mit Threads. Erste Schritte mit Threads.

View File

@ -1,6 +1,6 @@
# Race-Condition finden und beheben # Race-Condition finden und beheben
## Lernziel ## Lernziel
[Musterlösung](solution/)
In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben. In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben.

View File

@ -1,6 +1,6 @@
# Stack und Heap unterscheiden # Stack und Heap unterscheiden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen. Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen.

View File

@ -1,6 +1,6 @@
# synchronized verwenden # synchronized verwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Schlüsselwort `synchronized` verwenden. Schlüsselwort `synchronized` verwenden.

View File

@ -1,6 +1,6 @@
# Timer und TimerTask verwenden # Timer und TimerTask verwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Klassen aus `java.util.concurrent` verwenden. Klassen aus `java.util.concurrent` verwenden.

View File

@ -1,6 +1,6 @@
# Final anwenden # Final anwenden
## Lernziel ## Lernziel
[Musterlösung](solution/)
Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben. Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben.

View File

@ -1,6 +1,6 @@
# Figur und Rechteck # Figur und Rechteck
## Lernziel ## Lernziel
[Musterlösung](solution/)
Vererbung sinnvoll einsetzen. Vererbung sinnvoll einsetzen.

View File

@ -1,6 +1,6 @@
# Figur erweitern # Figur erweitern
## Lernziel ## Lernziel
[Musterlösung](solution/)
Vererbung sinnvoll einsetzen. Vererbung sinnvoll einsetzen.

View File

@ -1,6 +1,6 @@
# Figur noch einmal erweitern # Figur noch einmal erweitern
## Lernziel ## Lernziel
[Musterlösung](solution/)
Vererbung sinnvoll einsetzen. Vererbung sinnvoll einsetzen.

View File

@ -1,6 +1,6 @@
# Konstruktoren schreiben # Konstruktoren schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen. Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen.

View File

@ -1,6 +1,6 @@
# Polymorphie einsetzen # Polymorphie einsetzen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Durch Polymorphie Subklassen wie Basisklassen behandeln können. Durch Polymorphie Subklassen wie Basisklassen behandeln können.

View File

@ -1,6 +1,6 @@
# Singleton # Singleton
## Lernziel ## Lernziel
[Musterlösung](solution/)
Das Design-Pattern _Singleton_ einsetzen. Das Design-Pattern _Singleton_ einsetzen.

View File

@ -1,6 +1,6 @@
# Statische Methoden und Attribute # Statische Methoden und Attribute
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen. Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen.

View File

@ -1,6 +1,6 @@
# Methode überladen # Methode überladen
## Lernziel ## Lernziel
[Musterlösung](solution/)
Methoden überladen. Methoden überladen.

View File

@ -1,6 +1,6 @@
# Methoden überschreiben # Methoden überschreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Bei Vererbung das Überschreiben von Methoden einsetzen. Bei Vererbung das Überschreiben von Methoden einsetzen.

View File

@ -1,6 +1,6 @@
# Varag-Methode schreiben # Varag-Methode schreiben
## Lernziel ## Lernziel
[Musterlösung](solution/)
Eine Varag-Methode schreiben. Eine Varag-Methode schreiben.

View File

@ -1,6 +1,6 @@
# Vererbung von Figuren # Vererbung von Figuren
## Lernziel ## Lernziel
[Musterlösung](solution/)
Einfache Klassen schreiben und eine Vererbungshierarchie bilden. Einfache Klassen schreiben und eine Vererbungshierarchie bilden.

172
readme.md
View File

@ -23,84 +23,84 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstat
| 9. | Einführung | [Klasse mit JUnit testen](Einfuehrung_003/readme.md) | [](Einfuehrung_003/solution/) | | 9. | Einführung | [Klasse mit JUnit testen](Einfuehrung_003/readme.md) | [](Einfuehrung_003/solution/) |
| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](Strukturierung_001/readme.md) | [](Strukturierung_001/solution/) | | 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](Strukturierung_001/readme.md) | [](Strukturierung_001/solution/) |
| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](Strukturierung_002/readme.md) | [](Strukturierung_002/solution/) | | 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](Strukturierung_002/readme.md) | [](Strukturierung_002/solution/) |
| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | | | 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | [](Vererbung_001/solution/) |
| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | | | 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | [](Vererbung_002/solution/) |
| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | | | 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | [](Vererbung_003/solution/) |
| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | | | 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | [](Vererbung_004/solution/) |
| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | | | 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | [](Vererbung_005/solution/) |
| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | | | 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | [](Vererbung_006/solution/) |
| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | | | 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | [](Vererbung_007/solution/) |
| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | | | 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | [](Vererbung_008/solution/) |
| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | | | 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | [](Vererbung_009/solution/) |
| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | | | 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | [](Vererbung_010/solution/) |
| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | | | 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | [](Vererbung_011/solution/) |
| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | | | 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | [](Vererbung_012/solution/) |
| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | | | 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | [](Abstrakte_Klassen_001/solution/) |
| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | | | 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | [](Abstrakte_Klassen_002/solution/) |
| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | | | 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | [](Interfaces_001/solution/) |
| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | | | 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | [](Interfaces_002/solution/) |
| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | | | 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | [](Interfaces_003/solution/) |
| 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | | | 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | [](Interfaces_004/solution/) |
| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object_und_Wrapper_001/readme.md) | | | 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object_und_Wrapper_001/readme.md) | [](Object_und_Wrapper_001/solution/) |
| 31. | Object und Wrapper | [Clone](Object_und_Wrapper_002/readme.md) | | | 31. | Object und Wrapper | [Clone](Object_und_Wrapper_002/readme.md) | [](Object_und_Wrapper_002/solution/) |
| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object_und_Wrapper_003/readme.md) | | | 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object_und_Wrapper_003/readme.md) | [](Object_und_Wrapper_003/solution/) |
| 33. | Object und Wrapper | [equals und hashCode](Object_und_Wrapper_004/readme.md) | | | 33. | Object und Wrapper | [equals und hashCode](Object_und_Wrapper_004/readme.md) | [](Object_und_Wrapper_004/solution/) |
| 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object_und_Wrapper_005/readme.md) | | | 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object_und_Wrapper_005/readme.md) | [](Object_und_Wrapper_005/solution/) |
| 35. | Object und Wrapper | [Optimierung bei Integer](Object_und_Wrapper_006/readme.md) | | | 35. | Object und Wrapper | [Optimierung bei Integer](Object_und_Wrapper_006/readme.md) | [](Object_und_Wrapper_006/solution/) |
| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object_und_Wrapper_007/readme.md) | | | 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object_und_Wrapper_007/readme.md) | [](Object_und_Wrapper_007/solution/) |
| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | | | 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | [](Enumerationen_001/solution/) |
| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | | | 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | [](Enumerationen_002/solution/) |
| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | | | 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | [](Enumerationen_003/solution/) |
| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | | | 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | [](Enumerationen_004/solution/) |
| 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | | | 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | [](Ausnahmen_001/solution/) |
| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | | | 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | [](Ausnahmen_002/solution/) |
| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | | | 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | [](Ausnahmen_003/solution/) |
| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | | | 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | [](Ausnahmen_004/solution/) |
| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | | | 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | [](Ausnahmen_005/solution/) |
| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input_und_Output_001/readme.md) | | | 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input_und_Output_001/readme.md) | [](Input_und_Output_001/solution/) |
| 47. | Input und Output | [DataOutputStream](Input_und_Output_002/readme.md) | | | 47. | Input und Output | [DataOutputStream](Input_und_Output_002/readme.md) | [](Input_und_Output_002/solution/) |
| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input_und_Output_003/readme.md) | | | 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input_und_Output_003/readme.md) | [](Input_und_Output_003/solution/) |
| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input_und_Output_004/readme.md) | | | 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input_und_Output_004/readme.md) | [](Input_und_Output_004/solution/) |
| 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input_und_Output_005/readme.md) | | | 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input_und_Output_005/readme.md) | [](Input_und_Output_005/solution/) |
| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input_und_Output_006/readme.md) | | | 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input_und_Output_006/readme.md) | [](Input_und_Output_006/solution/) |
| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input_und_Output_007/readme.md) | | | 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input_und_Output_007/readme.md) | [](Input_und_Output_007/solution/) |
| 53. | Input und Output | [Fileattribute lesen](Input_und_Output_008/readme.md) | | | 53. | Input und Output | [Fileattribute lesen](Input_und_Output_008/readme.md) | [](Input_und_Output_008/solution/) |
| 54. | Input und Output | [`FilterReader`](Input_und_Output_009/readme.md) | | | 54. | Input und Output | [`FilterReader`](Input_und_Output_009/readme.md) | [](Input_und_Output_009/solution/) |
| 55. | Input und Output | [Konsolen Input/Output](Input_und_Output_010/readme.md) | | | 55. | Input und Output | [Konsolen Input/Output](Input_und_Output_010/readme.md) | [](Input_und_Output_010/solution/) |
| 56. | Input und Output | [Zeilen einer Textdatei zählen](Input_und_Output_011/readme.md) | | | 56. | Input und Output | [Zeilen einer Textdatei zählen](Input_und_Output_011/readme.md) | [](Input_und_Output_011/solution/) |
| 57. | Input und Output | [`RandomAccessFile`](Input_und_Output_012/readme.md) | | | 57. | Input und Output | [`RandomAccessFile`](Input_und_Output_012/readme.md) | [](Input_und_Output_012/solution/) |
| 58. | Input und Output | [`Reader` verwenden](Input_und_Output_013/readme.md) | | | 58. | Input und Output | [`Reader` verwenden](Input_und_Output_013/readme.md) | [](Input_und_Output_013/solution/) |
| 59. | Input und Output | [Rot13-Verschlüsselung](Input_und_Output_014/readme.md) | | | 59. | Input und Output | [Rot13-Verschlüsselung](Input_und_Output_014/readme.md) | [](Input_und_Output_014/solution/) |
| 60. | Input und Output | [Datei zerhacken](Input_und_Output_015/readme.md) | | | 60. | Input und Output | [Datei zerhacken](Input_und_Output_015/readme.md) | [](Input_und_Output_015/solution/) |
| 61. | Input und Output | [Serialisierung](Input_und_Output_016/readme.md) | | | 61. | Input und Output | [Serialisierung](Input_und_Output_016/readme.md) | [](Input_und_Output_016/solution/) |
| 62. | Generische Typen | [Einen generischen Typ schreiben](Generische_Typen_001/readme.md) | | | 62. | Generische Typen | [Einen generischen Typ schreiben](Generische_Typen_001/readme.md) | [](Generische_Typen_001/solution/) |
| 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische_Typen_002/readme.md) | | | 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische_Typen_002/readme.md) | [](Generische_Typen_002/solution/) |
| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische_Typen_003/readme.md) | | | 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische_Typen_003/readme.md) | [](Generische_Typen_003/solution/) |
| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische_Typen_004/readme.md) | | | 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische_Typen_004/readme.md) | [](Generische_Typen_004/solution/) |
| 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | | | 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | [](Generische_Typen_005/solution/) |
| 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | | | 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | [](Generische_Typen_006/solution/) |
| 68. | Generische Typen | [Generische Queue](Generische_Typen_007/readme.md) | | | 68. | Generische Typen | [Generische Queue](Generische_Typen_007/readme.md) | [](Generische_Typen_007/solution/) |
| 69. | Generische Typen | [`super` und `extends` einsetzen](Generische_Typen_008/readme.md) | | | 69. | Generische Typen | [`super` und `extends` einsetzen](Generische_Typen_008/readme.md) | [](Generische_Typen_008/solution/) |
| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische_Typen_009/readme.md) | | | 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische_Typen_009/readme.md) | [](Generische_Typen_009/solution/) |
| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte_Klassen_001/readme.md) | | | 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte_Klassen_001/readme.md) | [](Geschachtelte_Klassen_001/solution/) |
| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte_Klassen_002/readme.md) | | | 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte_Klassen_002/readme.md) | [](Geschachtelte_Klassen_002/solution/) |
| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte_Klassen_003/readme.md) | | | 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte_Klassen_003/readme.md) | [](Geschachtelte_Klassen_003/solution/) |
| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | | | 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | [](Lambdas_001/solution/) |
| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | | | 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | [](Lambdas_002/solution/) |
| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | | | 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | [](Geschachtelte_Klassen_001/solution/) |
| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | | | 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | [](Lambdas_001/solution/) |
| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | | | 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | [](Lambdas_002/solution/) |
| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | | | 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | [](Collections_001/solution/) |
| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | | | 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | [](Collections_002/solution/) |
| 81. | Collections | [`List<T>` und dessen Implementierungen](Collections_003/readme.md) | | | 81. | Collections | [`List<T>` und dessen Implementierungen](Collections_003/readme.md) | [](Collections_003/solution/) |
| 82. | Collections | [`Map<T>` verwenden](Collections_004/readme.md) | | | 82. | Collections | [`Map<T>` verwenden](Collections_004/readme.md) | [](Collections_004/solution/) |
| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | | | 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | [](Collections_005/solution/) |
| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | | | 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | [](Collections_006/solution/) |
| 85. | Collections | [`Set<T>` und dessen Implementierungen](Collections_007/readme.md) | | | 85. | Collections | [`Set<T>` und dessen Implementierungen](Collections_007/readme.md) | [](Collections_007/solution/) |
| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | | | 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | [](Collections_008/solution/) |
| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | | | 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | [](Collections_009/solution/) |
| 88. | Collections | [`Comparator<T>` verwenden und Objekte sortieren](Collections_010/readme.md) | | | 88. | Collections | [`Comparator<T>` verwenden und Objekte sortieren](Collections_010/readme.md) | [](Collections_010/solution/) |
| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | | | 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | [](Collections_011/solution/) |
| 90. | Streams | [Kleinbuchstaben in einem String zählen](Streams_001/readme.md) | | | 90. | Streams | [Kleinbuchstaben in einem String zählen](Streams_001/readme.md) | |
| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](Streams_002/readme.md) | | | 91. | Streams | [Buchstaben in einer Liste von Strings zählen](Streams_002/readme.md) | |
| 92. | Streams | [Kleinbuchstaben in einem String zählen](Streams_003/readme.md) | | | 92. | Streams | [Kleinbuchstaben in einem String zählen](Streams_003/readme.md) | |
@ -111,13 +111,13 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstat
| 97. | Streams | [Reduce](Streams_008/readme.md) | | | 97. | Streams | [Reduce](Streams_008/readme.md) | |
| 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | | | 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | |
| 99. | Streams | [Wörter zählen](Streams_010/readme.md) | | | 99. | Streams | [Wörter zählen](Streams_010/readme.md) | |
| 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | | | 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | [](Threads_001/solution/) |
| 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | | | 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | [](Threads_002/solution/) |
| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | | | 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | [](Threads_003/solution/) |
| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | | | 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | [](Threads_004/solution/) |
| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | | | 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | [](Threads_005/solution/) |
| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | | | 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | [](Threads_006/solution/) |
| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | | | 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | [](Threads_007/solution/) |
| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | | | 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | [](Threads_008/solution/) |
| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | | | 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | |
| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | | | 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | |

View File

@ -0,0 +1,79 @@
package pr2.collections.iterator;
import java.util.Iterator;
/**
* Eine einfache, naive Stack Implementierung.
*
* @param <T> Typ, der gespeichert werden soll.
*/
public class SimpleStack<T> implements Iterable<T> {
// Variablen sind nicht private wegen Zugriff durch den Iterator
T[] stack;
int pos;
/**
* Legt einen neuen Stack mit der gegebenen Größe an.
*
* @param size Größe des Stacks.
*/
@SuppressWarnings("unchecked")
public SimpleStack(int size) {
stack = (T[]) new Object[size];
pos = 0;
}
/**
* Fügt dem Stack ein neues Element hinzu.
*
* @param o Element, das hinzugefügt werden soll.
*/
public void push(T o) {
stack[pos++] = o;
}
/**
* Holt das oberste Element und entfernt es.
*
* @return das oberste Element
*/
public T pop() {
return stack[--pos];
}
/**
* Gibt das oberste Element zurück, ohne es zu entfernen.
*
* @return das oberste Element
*/
public T peek() {
return stack[pos - 1];
}
/**
* Erzeugt einen Iterator.
*
* @return Iterator
* @see java.lang.Iterable#iterator()
*/
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int iteratorPos = pos - 1;
@Override
public boolean hasNext() {
return iteratorPos >= 0;
}
@Override
public T next() {
return stack[iteratorPos--];
}
};
}
}

View File

@ -0,0 +1,123 @@
package pr2.collections.list;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Klassen, um die in einem Text vorkommenden Wörter zu sammeln.
*/
public class WordCollector {
/**
* Listet alle Worte in der Datei alphabetisch auf. Duplikate werden
* entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt.
*
* @param filename Dateiname
* @return die Liste der vorhandenen Worte
* @throws IOException Fehler beim Dateizugriff.
*/
public static List<String> listWords(String filename) throws IOException {
List<String> allWords = readFileAndSplitIntoWords(filename);
List<String> result = removeDuplicates(allWords);
return result;
}
/**
* Listet alle Worte in der Datei auf.
*
* @param filename Dateiname
* @return die Liste der vorhandenen Worte
* @throws IOException Fehler beim Dateizugriff.
*/
private static List<String> readFileAndSplitIntoWords(String filename)
throws IOException {
// Datei zum Lesen öffnen
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line; // aktuelle Zeile
List<String> wordList = new LinkedList<>();
// Über die Zeilen der Datei iterieren
while ((line = reader.readLine()) != null) {
// Sonderzeichen entfernen und die Zeilen in Worte splitten
line = line.toLowerCase();
line = line.replaceAll("[\",.:'\\-!?]", "");
String[] words = line.toLowerCase().split("[,. ]");
// Worte in den Puffer übertragen
wordList.addAll(Arrays.asList(words));
}
reader.close();
return wordList;
}
/**
* Sortiert das übergebene Array alphabetisch und entfernt Duplikate.
*
* @param input Eingabe Array
* @return sortiertes und bereinigtes Array
*/
@SuppressWarnings("PMD.AvoidReassigningLoopVariables")
private static List<String> removeDuplicates(List<String> input) {
// Eingabe-Liste kopieren
List<String> strings = new ArrayList<>(input);
// Liste sortieren
Collections.sort(strings);
// Über die Einträge laufen
for (int i = 0; i < strings.size(); i++) {
String word = strings.get(i);
// Über die Einträge laufen
for (int k = i + 1; k < strings.size(); k++) {
String otherWord = strings.get(k);
if (otherWord.compareTo(word) > 0) {
// Sind schon hinter der möglichen Position
break;
}
else if (otherWord.equals(word)) {
// Duplikat, entfernen
strings.remove(k);
k--;
}
}
}
return strings;
}
/**
* Hauptmethode.
*
* @param args Kommandozeilen-Argumente.
*/
public static void main(String[] args) {
try {
List<String> words = listWords(
"kafka.txt");
System.out.println(words);
} catch (IOException e) {
System.err.println("Probleme beim Dateizugriff: " + e);
}
}
}

View File

@ -0,0 +1,57 @@
package pr2.collections.list_iterator;
import java.util.Iterator;
public class Liste<T> implements Iterable<T> {
static class Item<T> {
T element;
Item<T> next;
public Item(T element) {
this.element = element;
}
}
Item<T> first;
Item<T> last;
class ListenIterator implements Iterator<T> {
Item<T> position = first;
@Override
public boolean hasNext() {
return (position != null);
}
@Override
public T next() {
T element = position.element;
position = position.next;
return element;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
public void add(T element) {
Item<T> item = new Item<T>(element);
first = (first != null) ? first : item;
if (last == null) {
last = item;
} else {
last.next = item;
last = item;
}
}
@Override
public Iterator<T> iterator() {
return new ListenIterator();
}
}

View File

@ -0,0 +1,83 @@
package pr2.collections.map;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Zählen von Worthäufigkeiten.
*/
public class WordCount {
/**
* Listet alle Worte in der Datei und deren Häufigkeit auf.
* Die zurückgegebene Liste ist bereits nach der Häufigkeit
* sortiert.
*
* @param filename Dateiname
* @return die Liste der vorhandenen Wörter
* @throws IOException Fehler beim Dateizugriff.
*/
private static List<WordFrequency> countWords(String filename)
throws IOException {
// Map mit dem Wort als Schlüssel und der Häufigkeit als Key
Map<String, WordFrequency> frequencyMap = new HashMap<>();
// Datei zum Lesen öffnen
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line; // aktuelle Zeile
// Über die Zeilen der Datei iterieren
while ((line = reader.readLine()) != null) {
// Sonderzeichen entfernen und die Zeilen in Worte splitten
line = line.toLowerCase();
line = line.replaceAll("[\",.:;)'\\-!?]", "");
String[] words = line.toLowerCase().split("[,. ]");
for (String word : words) {
WordFrequency entry = frequencyMap.get(word);
if (entry == null) {
entry = new WordFrequency(word, 0);
frequencyMap.put(word, entry);
}
entry.incrementFrequency();
}
}
reader.close();
List<WordFrequency> liste = new ArrayList<>(frequencyMap.values());
Collections.sort(liste);
return liste;
}
/**
* Hauptmethode.
*
* @param args Kommandozeilen-Argumente.
*/
public static void main(String[] args) {
try {
List<WordFrequency> words = countWords(
"kafka.txt");
for (WordFrequency word : words) {
System.out.println(word);
}
} catch (IOException e) {
System.err.println("Probleme beim Dateizugriff: " + e);
}
}
}

View File

@ -0,0 +1,56 @@
package pr2.collections.map;
/**
* Klasse für die Verwaltung der Worthäufigkeiten.
*/
public class WordFrequency implements Comparable<WordFrequency> {
/**
* Das Wort.
*/
String word;
/**
* Seine Häufigkeit.
*/
int frequency;
/**
* Legt ein neues Objekt an.
*
* @param word das gespeicherte Wort
* @param frequency die Häfigkeit
*/
WordFrequency(String word, int frequency) {
this.word = word;
this.frequency = frequency;
}
/**
* Vergleich mit anderem Objekt.
*
* @param o das andere Objekt
* @return Ergebnis des Vergleiches
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(WordFrequency o) {
return o.frequency - frequency;
}
/**
* Erhöht die Häufigkeit des Wortes.
*/
public void incrementFrequency() {
frequency++;
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return String.format("%s: %d", word, frequency);
}
}

View File

@ -0,0 +1,18 @@
package pr2.collections.reverser;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Reverser {
public void reverse(List<String> liste) {
Collections.sort(liste, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2) * -1;
}
});
}
}

View File

@ -0,0 +1,19 @@
package pr2.collections.reverser_generic;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Reverser<T extends Comparable<T>> {
public void reverse(List<T> liste) {
Collections.sort(liste, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
return o1.compareTo(o2) * -1;
}
});
}
}

View File

@ -0,0 +1,81 @@
package pr2.collections.set;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Klassen, um die in einem Text vorkommenen Wörter zu sammeln.
*/
public class WordCollector {
/**
* Listet alle Worte in der Datei alphabetisch auf. Duplikate werden
* entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt.
*
* @param filename Dateiname
* @return die Liste der vorhandenen Worte
* @throws IOException Fehler beim Dateizugriff.
*/
public static List<String> listWords(String filename) throws IOException {
Set<String> allWords = readFileAndSplitIntoWords(filename);
List<String> wordsSorted = new ArrayList<>(allWords);
Collections.sort(wordsSorted);
return wordsSorted;
}
/**
* Listet alle Worte in der Datei auf.
*
* @param filename Dateiname
* @return die Liste der vorhandenen Worte
* @throws IOException Fehler beim Dateizugriff.
*/
private static Set<String> readFileAndSplitIntoWords(String filename)
throws IOException {
// Datei zum Lesen öffnen
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line; // aktuelle Zeile
Set<String> wordBuffer = new HashSet<>(); // Puffer für die Worte
// Über die Zeilen der Datei iterieren
while ((line = reader.readLine()) != null) {
// Sonderzeichen entfernen und die Zeilen in Worte splitten
line = line.replaceAll("[\",.:'\\-!?]", "");
String[] words = line.toLowerCase().split("[,. ]");
// Worte in den Puffer übertragen
wordBuffer.addAll(Arrays.asList(words));
}
reader.close();
return wordBuffer;
}
/**
* Hauptmethode.
*
* @param args Kommandozeilen-Argumente.
*/
public static void main(String[] args) {
try {
List<String> words = listWords("kafka.txt");
System.out.println(words);
} catch (IOException e) {
System.err.println("Probleme beim Dateizugriff: " + e);
}
}
}

View File

@ -0,0 +1,17 @@
package pr2.collections.sorter_1;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class CommandLineSorter {
public static void main(String[] args) {
List<String> argList = Arrays.asList(args);
Collections.sort(argList);
for (String element : argList) {
System.out.println(element);
}
}
}

View File

@ -0,0 +1,16 @@
package pr2.collections.sorter_2;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
public class CommandLineSorter {
public static void main(String[] args) {
Set<String> argList = new TreeSet<String>(Arrays.asList(args));
for (String element : argList) {
System.out.println(element);
}
}
}

View File

@ -0,0 +1,83 @@
package pr2.collections.sortieren;
import java.util.Arrays;
import java.util.Comparator;
/**
* Klasse zum Sortieren von Strings.
*/
public class Sorter {
/**
* Liefert einen Comparator für Strings.
*
* @param order Sortierreihenfolge.
* @return Comparator, entsprechend der gewünschten Sortierreihenfolge.
*/
private static Comparator<String> stringComparator(final SortOrder order) {
/* Comparator. */
class MyComparator implements Comparator<String> {
/**
* Vergleicht die Strings.
*
* @param o1 Erster String
* @param o2 Zweiter String
* @return Ergebnis des Vergleichs.
*/
@Override
public int compare(String o1, String o2) {
switch (order) {
case ASCENDING:
return o1.compareTo(o2);
case DESCENDING:
return -o1.compareTo(o2);
case ASCENDING_CASE_INSENSITIVE:
return o1.toUpperCase().compareTo(o2.toUpperCase());
case DESCENDING_CASE_INSENSITIVE:
return -o1.toUpperCase().compareTo(o2.toUpperCase());
default:
throw new IllegalArgumentException();
}
}
}
return new MyComparator();
}
/**
* Sortiert das übergebene Array entsprechend der gewünschten Reihenfolge.
*
* @param array das zu sortierende Array.
* @param order die Sortierreihenfolge.
*/
public static void sort(String[] array, SortOrder order) {
Arrays.sort(array, stringComparator(order));
}
/**
* Sortierreihenfolge für die Strings.
*/
public enum SortOrder {
/**
* Aufsteigend.
*/
ASCENDING,
/**
* Absteigend.
*/
DESCENDING,
/**
* Aufsteigend, ohne Beachtung der Groß-/Kleinschreibung.
*/
ASCENDING_CASE_INSENSITIVE,
/**
* Absteigend, ohne Beachtung der Groß-/Kleinschreibung.
*/
DESCENDING_CASE_INSENSITIVE
}
}

View File

@ -0,0 +1,37 @@
package pr2.collections.woerterbuch;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Woerterbuch {
private static final Map<String, String> WOERTER;
static {
Map<String, String> map = new HashMap<String, String>();
map.put("gehen", "go");
map.put("schlafen", "sleep");
map.put("tanzen", "dance");
map.put("springen", "jump");
WOERTER = Collections.unmodifiableMap(map);
}
public static void main(String[] args) {
if (args.length == 0) {
System.err.println("Bitte mindestens ein Wort angeben!");
System.exit(1);
}
for (String wort : args) {
String uebersetzung = WOERTER.get(wort);
if (uebersetzung == null) {
uebersetzung = "<unbekanntes Wort>";
}
System.out.printf("%s => %s%n", wort, uebersetzung);
}
}
}

View File

@ -0,0 +1,38 @@
package pr2.enums.eigene;
import java.util.Random;
/**
* Ein einfacher Würfel.
*/
public class Wuerfel {
/**
* Zufallszahlengenerator.
*/
private final Random rnd = new Random();
/**
* Anzahl der Seiten des Würfels.
*/
private final int numSides;
/**
* Einen neuen Würfel anlegen.
*
* @param typ Anzahl der Seiten des Würfels.
*/
public Wuerfel(WuerfelTyp typ) {
this.numSides = typ.getSeiten();
}
/**
* Den Würfel werfen.
*
* @return Ergebnis des Wurfes.
*/
public int roll() {
return rnd.nextInt(numSides) + 1;
}
}

View File

@ -0,0 +1,70 @@
package pr2.enums.eigene;
/**
* Enumeration für die verschiedenen Würfel-Typen.
*/
public enum WuerfelTyp {
/**
* 4-seitiger Würfel.
*/
D4(4),
/**
* 6-seitiger Würfel.
*/
D6(6),
/**
* 8-seitiger Würfel.
*/
D8(8),
/**
* 10-seitiger Würfel.
*/
D10(10),
/**
* 12-seitiger Würfel.
*/
D12(12),
/**
* 20-seitiger Würfel.
*/
D20(20);
/**
* Anzahl der Seiten.
*/
private final int seiten;
/**
* Neue Instanz anlegen.
*
* @param seiten Anzahl der Seiten.
*/
WuerfelTyp(int seiten) {
this.seiten = seiten;
}
/**
* Anzahl der Seiten.
*
* @return Anzahl der Seiten.
*/
public int getSeiten() {
return seiten;
}
/**
* Durchschnittliche Augenzahl bei einer großen Anzahl von
* Würfen.
*
* @return Durchschnittliche Augenzahl.
*/
public double average() {
return 0.5 * (seiten + 1);
}
}

Some files were not shown because too many files have changed in this diff Show More