forked from pr2-lecture/uebungen
Compare commits
3 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
cfda43bb03 | |
|
|
7811de699d | |
|
|
0c8383fd67 |
|
|
@ -1,6 +1,6 @@
|
|||
# Abstrakte Klassen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Abstrakte Klasse
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Abstrakte Klasse verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Ausnahmen testen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Bei einer gegebenen Klasse Testfälle mit JUnit schreiben, die auf das Werfen von Ausnahmen testen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Eigene Ausnahmen schreiben und an entsprechender Stelle werfen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Ausnahmen programmieren und sinnvoll einsetzen. Bedeutung der Schlüsselwörter `throws` und `throw` verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Eigene Exception schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eigene Exceptions entwerfen und verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Handle-or-Declare-Regel anwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
In einem vorhandenen Programm die Ausnahmen korrekt weiter deklarieren und an den richtigen Stellen fangen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Ausnahmen mit `try` und `catch` behandeln.
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Vorhandene Ausnahmen mit `try` und `catch` abfangen und behandeln.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Iterator schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Für eine gegebene Klasse einen Iterator schreiben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Iterator programmieren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Iteratoren verstehen und programmieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `List<T>` und dessen Implementierungen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Das Interface `List<T>` und eine passende Implementierung einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `Map<T>` verwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Das Interface `Map<T>` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# ReverserGeneric
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
`Comparable` verstehen und nutzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Strings umgekehrt sortieren: Reverser
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
`Comparable` verstehen und nutzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `Set<T>` und dessen Implementierungen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Das Interface `Set<T>` und eine passende Implementierung einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# CommandLineSorter
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Sortieren von Collections.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# CommandLineSorter -- Version 2
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Sortieren von Collections.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `Comparator<T>` verwenden und Objekte sortieren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator<T>` realisieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Wörterbuchprogramm
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Interface `Map` und seine Implementierungen einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Eigene Enumeration schreiben und verwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Enumeration schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Singleton-Eigenschaft von Enumerationen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Die Singleton-Eigenschaft von Enumerationen verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Assignment: Stein, Papier, Schere, Echse, Spock
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Mit Enumerationen arbeiten.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Einen generischen Typ schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einen vorhandenen Typ so umgestalten, dass er als generischer Typ verwendet werden kann.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Generische Klasse Pair schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Von einem generischen Typ erben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Generische Klasse Pair erweitern: NumberPair
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Von einem generischen Typ erben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Generische Klasse Pair erweitern: SamePair
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Von einem generischen Typ erben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# PairList
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Sammlungen von Objekten eines generischen Typs erstellen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Wildcard benutzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Wildcards einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Generische Queue
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einen komplexeren generischen Typ entwickeln.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `super` und `extends` einsetzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Methoden unter Verwendung von `super` und `extends` gestalten, sodass sie flexibel auch mit Sub- bzw. Supertypen umgehen können.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Generische Typen zusammen mit Wildcards einsetzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Gebundene und ungebundene Wildcards einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# MatrixSuche
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Statische innere Klassen einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Innere Klasse Beobachter
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Zugriff von inneren Klassen auf die umgebende Klasse.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Callback mit anonymer Klasse realisieren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `BufferedReader` zum zeilenweisen Lesen einsetzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Daten Zeilenweise mit einem `BufferedReader` verwenden und dabei das Decorator Pattern einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# DataOutputStream
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Daten mit einem `DataOutputStreams` manuell serialisieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# DataOutputStream durch Serialisierung ersetzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Daten mit einem `ObjectOutputStreams` serialisieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Daten mit `DataOutputStream` und `DataInputStream` verarbeiten
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Daten mit einem `InputStream` lesen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einen `InputStream` benutzen, um Daten aus einer Datei zu lesen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Daten mit einem `OutputStream` schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einen `OutputStream` verwenden, um Daten zu schreiben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Filesystem-Abstraktion mit `File`
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Die Klasse `Path` einsetzen, um plattformunabhängig Operationen auf dem Dateisystem durchzuführen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Fileattribute lesen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Methoden der Klassen `Path` und `Files` nutzen und verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `FilterReader`
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einen eigenen Filter in Form eines `FilterReaders` programmieren und hiermit in den Datenstrom eingreifen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Konsolen Input/Output
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Daten von der Konsole lesen und über eine Ausgabeumlenkung in eine Datei umlenken. `PrintStream` und `InputStreamReader` einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Zeilen einer Textdatei zählen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Dateien zeilenweise lesen und verarbeiten.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `RandomAccessFile`
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `Reader` verwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Textdaten mithilfe von `Reader` verarbeiten.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Rot13-Verschlüsselung
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Funktionsweise und Einsatz von Filtern.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Datei zerhacken
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Daten byteweise aus einem Stream lesen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Serialisierung
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Comparable implementieren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Klasse "comparable" machen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Interface Stack entwerfen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Ein Interface entwerfen und dieses dann implementieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Interface: Uebersetzer
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Ein Interface implementieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Interfaces anwenden und entwerfen
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# StringTransmogrifier
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Funktionale Interfaces entwerfen und verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# StringTransmogrifier erweitern
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Funktionale Interfaces entwerfen und verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Deep-Copy mit `clone()`
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Clone
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `equals()` und `hashCode()` implementieren und nutzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# equals und hashCode
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# `toString()`-Methode implementieren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Optimierung bei Integer
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Wrapper-Klassen und deren Optimierungen verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Methoden der Wrapper-Klassen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Wrapper-Klassen nutzen, um Zahlen umzuwandeln.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
# Lösung: Klasse per Reflection analysieren
|
||||
|
||||
Musterlösung:
|
||||
|
||||
[pr2.reflection.analyzer](../../solutions/src/main/java/pr2/reflection/analyzer/)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Lösung: Objekte per Reflection erzeugen
|
||||
|
||||
Musterlösung:
|
||||
|
||||
[pr2.reflection.reflector](../../solutions/src/main/java/pr2/reflection/reflector/)
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# Fakultät parallel berechnen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Berechnungen parallelisieren.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Thread per interrupt beenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Threads kontrolliert beenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# wait und notify benutzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Thread-Koordination über Condition-Variablen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Parallele Ausgaben erzeugen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Erste Schritte mit Threads.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Race-Condition finden und beheben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Stack und Heap unterscheiden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# synchronized verwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Schlüsselwort `synchronized` verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Timer und TimerTask verwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Klassen aus `java.util.concurrent` verwenden.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Final anwenden
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Figur und Rechteck
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Vererbung sinnvoll einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Figur erweitern
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Vererbung sinnvoll einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Figur noch einmal erweitern
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Vererbung sinnvoll einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Konstruktoren schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Polymorphie einsetzen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Durch Polymorphie Subklassen wie Basisklassen behandeln können.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Singleton
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Das Design-Pattern _Singleton_ einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Statische Methoden und Attribute
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Methode überladen
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Methoden überladen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Methoden überschreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Bei Vererbung das Überschreiben von Methoden einsetzen.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Varag-Methode schreiben
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Eine Varag-Methode schreiben.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Vererbung von Figuren
|
||||
## Lernziel
|
||||
|
||||
[Musterlösung](solution/)
|
||||
|
||||
|
||||
Einfache Klassen schreiben und eine Vererbungshierarchie bilden.
|
||||
|
|
|
|||
172
readme.md
172
readme.md
|
|
@ -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/) |
|
||||
| 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/) |
|
||||
| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | |
|
||||
| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | |
|
||||
| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | |
|
||||
| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | |
|
||||
| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | |
|
||||
| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | |
|
||||
| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | |
|
||||
| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | |
|
||||
| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | |
|
||||
| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | |
|
||||
| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | |
|
||||
| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | |
|
||||
| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | |
|
||||
| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | |
|
||||
| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | |
|
||||
| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | |
|
||||
| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | |
|
||||
| 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | |
|
||||
| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object_und_Wrapper_001/readme.md) | |
|
||||
| 31. | Object und Wrapper | [Clone](Object_und_Wrapper_002/readme.md) | |
|
||||
| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object_und_Wrapper_003/readme.md) | |
|
||||
| 33. | Object und Wrapper | [equals und hashCode](Object_und_Wrapper_004/readme.md) | |
|
||||
| 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object_und_Wrapper_005/readme.md) | |
|
||||
| 35. | Object und Wrapper | [Optimierung bei Integer](Object_und_Wrapper_006/readme.md) | |
|
||||
| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object_und_Wrapper_007/readme.md) | |
|
||||
| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | |
|
||||
| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | |
|
||||
| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | |
|
||||
| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | |
|
||||
| 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | |
|
||||
| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | |
|
||||
| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | |
|
||||
| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | |
|
||||
| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | |
|
||||
| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input_und_Output_001/readme.md) | |
|
||||
| 47. | Input und Output | [DataOutputStream](Input_und_Output_002/readme.md) | |
|
||||
| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input_und_Output_003/readme.md) | |
|
||||
| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input_und_Output_004/readme.md) | |
|
||||
| 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input_und_Output_005/readme.md) | |
|
||||
| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input_und_Output_006/readme.md) | |
|
||||
| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input_und_Output_007/readme.md) | |
|
||||
| 53. | Input und Output | [Fileattribute lesen](Input_und_Output_008/readme.md) | |
|
||||
| 54. | Input und Output | [`FilterReader`](Input_und_Output_009/readme.md) | |
|
||||
| 55. | Input und Output | [Konsolen Input/Output](Input_und_Output_010/readme.md) | |
|
||||
| 56. | Input und Output | [Zeilen einer Textdatei zählen](Input_und_Output_011/readme.md) | |
|
||||
| 57. | Input und Output | [`RandomAccessFile`](Input_und_Output_012/readme.md) | |
|
||||
| 58. | Input und Output | [`Reader` verwenden](Input_und_Output_013/readme.md) | |
|
||||
| 59. | Input und Output | [Rot13-Verschlüsselung](Input_und_Output_014/readme.md) | |
|
||||
| 60. | Input und Output | [Datei zerhacken](Input_und_Output_015/readme.md) | |
|
||||
| 61. | Input und Output | [Serialisierung](Input_und_Output_016/readme.md) | |
|
||||
| 62. | Generische Typen | [Einen generischen Typ schreiben](Generische_Typen_001/readme.md) | |
|
||||
| 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische_Typen_002/readme.md) | |
|
||||
| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische_Typen_003/readme.md) | |
|
||||
| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische_Typen_004/readme.md) | |
|
||||
| 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | |
|
||||
| 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | |
|
||||
| 68. | Generische Typen | [Generische Queue](Generische_Typen_007/readme.md) | |
|
||||
| 69. | Generische Typen | [`super` und `extends` einsetzen](Generische_Typen_008/readme.md) | |
|
||||
| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische_Typen_009/readme.md) | |
|
||||
| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte_Klassen_001/readme.md) | |
|
||||
| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte_Klassen_002/readme.md) | |
|
||||
| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte_Klassen_003/readme.md) | |
|
||||
| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | |
|
||||
| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | |
|
||||
| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | |
|
||||
| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | |
|
||||
| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | |
|
||||
| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | |
|
||||
| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | |
|
||||
| 81. | Collections | [`List<T>` und dessen Implementierungen](Collections_003/readme.md) | |
|
||||
| 82. | Collections | [`Map<T>` verwenden](Collections_004/readme.md) | |
|
||||
| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | |
|
||||
| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | |
|
||||
| 85. | Collections | [`Set<T>` und dessen Implementierungen](Collections_007/readme.md) | |
|
||||
| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | |
|
||||
| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | |
|
||||
| 88. | Collections | [`Comparator<T>` verwenden und Objekte sortieren](Collections_010/readme.md) | |
|
||||
| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | |
|
||||
| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | [✅](Vererbung_001/solution/) |
|
||||
| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | [✅](Vererbung_002/solution/) |
|
||||
| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | [✅](Vererbung_003/solution/) |
|
||||
| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | [✅](Vererbung_004/solution/) |
|
||||
| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | [✅](Vererbung_005/solution/) |
|
||||
| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | [✅](Vererbung_006/solution/) |
|
||||
| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | [✅](Vererbung_007/solution/) |
|
||||
| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | [✅](Vererbung_008/solution/) |
|
||||
| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | [✅](Vererbung_009/solution/) |
|
||||
| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | [✅](Vererbung_010/solution/) |
|
||||
| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | [✅](Vererbung_011/solution/) |
|
||||
| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | [✅](Vererbung_012/solution/) |
|
||||
| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte_Klassen_001/readme.md) | [✅](Abstrakte_Klassen_001/solution/) |
|
||||
| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte_Klassen_002/readme.md) | [✅](Abstrakte_Klassen_002/solution/) |
|
||||
| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | [✅](Interfaces_001/solution/) |
|
||||
| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | [✅](Interfaces_002/solution/) |
|
||||
| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | [✅](Interfaces_003/solution/) |
|
||||
| 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) | [✅](Object_und_Wrapper_001/solution/) |
|
||||
| 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) | [✅](Object_und_Wrapper_003/solution/) |
|
||||
| 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) | [✅](Object_und_Wrapper_005/solution/) |
|
||||
| 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) | [✅](Object_und_Wrapper_007/solution/) |
|
||||
| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | [✅](Enumerationen_001/solution/) |
|
||||
| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | [✅](Enumerationen_002/solution/) |
|
||||
| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | [✅](Enumerationen_003/solution/) |
|
||||
| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | [✅](Enumerationen_004/solution/) |
|
||||
| 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) | [✅](Ausnahmen_002/solution/) |
|
||||
| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | [✅](Ausnahmen_003/solution/) |
|
||||
| 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) | [✅](Ausnahmen_005/solution/) |
|
||||
| 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) | [✅](Input_und_Output_002/solution/) |
|
||||
| 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) | [✅](Input_und_Output_004/solution/) |
|
||||
| 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) | [✅](Input_und_Output_006/solution/) |
|
||||
| 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) | [✅](Input_und_Output_008/solution/) |
|
||||
| 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) | [✅](Input_und_Output_010/solution/) |
|
||||
| 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) | [✅](Input_und_Output_012/solution/) |
|
||||
| 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) | [✅](Input_und_Output_014/solution/) |
|
||||
| 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) | [✅](Input_und_Output_016/solution/) |
|
||||
| 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) | [✅](Generische_Typen_002/solution/) |
|
||||
| 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) | [✅](Generische_Typen_004/solution/) |
|
||||
| 66. | Generische Typen | [PairList](Generische_Typen_005/readme.md) | [✅](Generische_Typen_005/solution/) |
|
||||
| 67. | Generische Typen | [Wildcard benutzen](Generische_Typen_006/readme.md) | [✅](Generische_Typen_006/solution/) |
|
||||
| 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) | [✅](Generische_Typen_008/solution/) |
|
||||
| 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) | [✅](Geschachtelte_Klassen_001/solution/) |
|
||||
| 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) | [✅](Geschachtelte_Klassen_003/solution/) |
|
||||
| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | [✅](Lambdas_001/solution/) |
|
||||
| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | [✅](Lambdas_002/solution/) |
|
||||
| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte_Klassen_001/readme.md) | [✅](Geschachtelte_Klassen_001/solution/) |
|
||||
| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | [✅](Lambdas_001/solution/) |
|
||||
| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | [✅](Lambdas_002/solution/) |
|
||||
| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | [✅](Collections_001/solution/) |
|
||||
| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | [✅](Collections_002/solution/) |
|
||||
| 81. | Collections | [`List<T>` und dessen Implementierungen](Collections_003/readme.md) | [✅](Collections_003/solution/) |
|
||||
| 82. | Collections | [`Map<T>` verwenden](Collections_004/readme.md) | [✅](Collections_004/solution/) |
|
||||
| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | [✅](Collections_005/solution/) |
|
||||
| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | [✅](Collections_006/solution/) |
|
||||
| 85. | Collections | [`Set<T>` und dessen Implementierungen](Collections_007/readme.md) | [✅](Collections_007/solution/) |
|
||||
| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | [✅](Collections_008/solution/) |
|
||||
| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | [✅](Collections_009/solution/) |
|
||||
| 88. | Collections | [`Comparator<T>` verwenden und Objekte sortieren](Collections_010/readme.md) | [✅](Collections_010/solution/) |
|
||||
| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | [✅](Collections_011/solution/) |
|
||||
| 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) | |
|
||||
| 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) | |
|
||||
| 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | |
|
||||
| 99. | Streams | [Wörter zählen](Streams_010/readme.md) | |
|
||||
| 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | |
|
||||
| 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | |
|
||||
| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | |
|
||||
| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | |
|
||||
| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | |
|
||||
| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | |
|
||||
| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | |
|
||||
| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/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) | [✅](Threads_002/solution/) |
|
||||
| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | [✅](Threads_003/solution/) |
|
||||
| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | [✅](Threads_004/solution/) |
|
||||
| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | [✅](Threads_005/solution/) |
|
||||
| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | [✅](Threads_006/solution/) |
|
||||
| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | [✅](Threads_007/solution/) |
|
||||
| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | [✅](Threads_008/solution/) |
|
||||
| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | |
|
||||
| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | |
|
||||
|
|
|
|||
|
|
@ -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--];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
Loading…
Reference in New Issue