Compare commits

..

No commits in common. "main" and "main" have entirely different histories.
main ... main

288 changed files with 170 additions and 7954 deletions

View File

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

View File

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

View File

@ -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.

View File

@ -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.

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -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.

View File

@ -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.

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

@ -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.

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +0,0 @@
# 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
## Lernziel
[Musterlösung](solution/)
Berechnungen parallelisieren.

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

@ -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.

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# Vererbung von Figuren
## Lernziel
[Musterlösung](solution/)
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/) |
| 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) | [](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/) |
| 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) | |
| 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) | [](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/) |
| 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) | |
| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | |
| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) | |

View File

@ -1,79 +0,0 @@
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

@ -1,123 +0,0 @@
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

@ -1,57 +0,0 @@
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

@ -1,83 +0,0 @@
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

@ -1,56 +0,0 @@
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

@ -1,18 +0,0 @@
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

@ -1,19 +0,0 @@
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

@ -1,81 +0,0 @@
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

@ -1,17 +0,0 @@
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

@ -1,16 +0,0 @@
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

@ -1,83 +0,0 @@
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

@ -1,37 +0,0 @@
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

@ -1,38 +0,0 @@
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

@ -1,70 +0,0 @@
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