2
0
Fork 0

Update of exercises

main
Thomas Smits 2025-08-30 05:38:06 +02:00
parent 175c7303b6
commit 741e9b4482
382 changed files with 405 additions and 15264 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 @@
# String in Großbuchstaben umwandeln
## Lernziel
[Musterlösung](solution/)
* Daten von der Kommandozeile lesen.

View File

@ -1,6 +1,6 @@
# Labeled Break
## Lernziel
[Musterlösung](solution/)
Ein labeled break verwenden.

View File

@ -1,6 +1,6 @@
# Passwortbewertung
## Lernziel
[Musterlösung](solution/)
Einfache String-Verarbeitung.

View File

@ -1,6 +1,6 @@
# printf mit Formatstring
## Lernziel
[Musterlösung](solution/)
Formatierung mit Formatstrings.

View File

@ -1,6 +1,6 @@
# Maximum in einem Array suchen
## Lernziel
[Musterlösung](solution/)
Über Arrays iterieren.

View File

@ -1,6 +1,6 @@
# Taschenrechner
## Lernziel
[Musterlösung](solution/)
`case` 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.
@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.list](../sources/src/main/java/pr2/colle
Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben.
Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden.
Leider wurde `WordCollector` von einem/einer Entwickler:in geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden.
Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt.

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.
@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.set](../sources/src/main/java/pr2/collec
Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben.
Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden.
Leider wurde `WordCollector` von einem/einer Entwickler:in geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden.
Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt.

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.
@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr
Schreiben Sie ein einfaches Wörterbuchprogramm, dem man auf der Kommandozeile eine beliebige Anzahl von Wörtern übergeben kann und das dann die entsprechende Übersetzung ausgibt. Die Wörter des Wörterbuchs sollen fest im Programm einprogrammiert sein. Es reicht, wenn Sie einige wenige Wörter vorsehen.
Berücksichtigen Sie bitte den Fall, dass der Benutzer kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist.
Berücksichtigen Sie bitte den Fall, dass der/die Benutzer:in kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist.
```console
> java Woerterbuch

View File

@ -1,6 +1,6 @@
# Java-Coding-Standard anwenden
## Lernziel
[Musterlösung](solution/)
Java-Code korrekt entsprechend dem [Coding-Standard von Oracle](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf) formatieren.

View File

@ -1,6 +1,6 @@
# JavaDoc schreiben
## Lernziel
[Musterlösung](solution/)
Eine vorhandene Klasse mit korrekten JavaDoc-Kommentaren versehen.

View File

@ -1,6 +1,6 @@
# Klasse mit JUnit testen
## Lernziel
[Musterlösung](solution/)
Einen JUnit-Test für eine gegebene Klasse schreiben.

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.
@ -11,7 +11,7 @@ Gehen Sie in das Paket [pr2.io.datei_schreiben](../sources/src/main/java/pr2/io/
In dieser Aufgabe sollen Sie eine Reihe von Bytes in eine Datei schreiben. Ein JUnit-Test wird überprüfen, ob Sie dies richtig getan haben.
Öffnen Sie einen passenden `OutputStream`, um in die Datei `output/daten.dat` zu schreiben (verwenden Sie die Konstante `FILE` für den Dateinamen). Schreiben Sie nun die Byte-Folge
Öffnen Sie einen passenden `OutputStream`, um in die, die Ihnen als Kommandozeilenargument übergeben wird, zu schreiben. Schreiben Sie nun die Byte-Folge
```console
0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef

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,6 +1,6 @@
# Kleinbuchstaben in einem String zählen
## Lernziel
[Musterlösung](solution/)
Streams verwenden.

View File

@ -1,6 +1,6 @@
# Buchstaben in einer Liste von Strings zählen
## Lernziel
[Musterlösung](solution/)
Streams verwenden.

View File

@ -1,6 +1,6 @@
# Kleinbuchstaben in einem String zählen
## Lernziel
[Musterlösung](solution/)
Streams verwenden.

View File

@ -1,6 +1,6 @@
# Liste filtern
## Lernziel
[Musterlösung](solution/)
Daten in Streams filtern.

View File

@ -1,6 +1,6 @@
# Streams mit interner Iteration
## Lernziel
[Musterlösung](solution/)
Einen Stream mit einer internen Iteration verwenden. Die Iteration sowohl mit einem Lambda, als auch mit einer Methodenreferenz durchführen.

View File

@ -1,6 +1,6 @@
# Map und Filter auf Streams
## Lernziel
[Musterlösung](solution/)
Einen Stream durch Map- und Filter-Operationen analysieren und gewünschte Daten extrahieren.

View File

@ -1,6 +1,6 @@
# Map und Reduce auf Streams
## Lernziel
[Musterlösung](solution/)
Die Daten in einem Stream durch Map- und Reduce verdichten.

View File

@ -1,6 +1,6 @@
# Reduce
## Lernziel
[Musterlösung](solution/)
Daten in Streams mit `reduce` aggregieren.

View File

@ -1,6 +1,6 @@
# Summe über reduce bestimmen
## Lernziel
[Musterlösung](solution/)
Daten in Streams mit `reduce` aggregieren.

View File

@ -1,6 +1,6 @@
# Wörter zählen
## Lernziel
[Musterlösung](solution/)
Daten in Streams mit `reduce` aggregieren.

View File

@ -1,6 +1,6 @@
# Information-Hiding einer Klasse verbessern
## Lernziel
[Musterlösung](solution/)
Bei einer vorhandenen Klasse Information Hiding verbessern und Seiteneffekte reduzieren.

View File

@ -1,6 +1,6 @@
# Vorhandene Bibliotheken als JAR einbinden
## Lernziel
[Musterlösung](solution/)
Eine vorhandene Bibliothek in einem Projekt verwenden und hierzu ein JAR einbinden.

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.

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