From 92a445fc0286ed703db4f1561872bf11486e968d Mon Sep 17 00:00:00 2001 From: Thomas Smits Date: Sat, 20 Jan 2024 16:52:10 +0100 Subject: [PATCH] Update of exercises --- Assignment_074/readme.md | 20 +--- Assignment_074/solution/readme.md | 4 +- Assignment_075/readme.md | 12 +- Assignment_075/solution/readme.md | 4 +- Assignment_076/readme.md | 12 +- Assignment_076/solution/readme.md | 4 +- Assignment_077/readme.md | 13 +-- Assignment_077/solution/readme.md | 4 +- Assignment_078/readme.md | 15 ++- Assignment_078/solution/readme.md | 4 +- Assignment_079/readme.md | 14 +-- Assignment_079/solution/readme.md | 4 +- Assignment_080/readme.md | 20 ++-- Assignment_080/solution/readme.md | 4 +- Assignment_081/readme.md | 10 +- Assignment_081/solution/readme.md | 4 +- Assignment_082/readme.md | 16 +-- Assignment_082/solution/readme.md | 4 +- Assignment_083/readme.md | 12 +- Assignment_083/solution/readme.md | 4 +- Assignment_084/readme.md | 14 ++- Assignment_084/solution/readme.md | 4 +- Assignment_085/readme.md | 12 +- Assignment_085/solution/readme.md | 4 +- Assignment_086/readme.md | 16 ++- Assignment_086/solution/readme.md | 4 +- Assignment_087/readme.md | 30 +++-- Assignment_087/solution/readme.md | 4 +- Assignment_088/readme.md | 10 +- Assignment_088/solution/readme.md | 4 +- Assignment_089/readme.md | 16 +-- Assignment_089/solution/readme.md | 4 +- Assignment_090/readme.md | 30 ++--- Assignment_090/solution/readme.md | 4 +- Assignment_091/readme.md | 19 ++- Assignment_091/solution/readme.md | 4 +- Assignment_092/readme.md | 18 ++- Assignment_092/solution/readme.md | 4 +- Assignment_093/readme.md | 16 ++- Assignment_093/solution/readme.md | 4 +- Assignment_094/readme.md | 28 +++-- Assignment_094/solution/readme.md | 4 +- Assignment_095/readme.md | 35 ------ Assignment_095/solution/readme.md | 5 - Assignment_096/readme.md | 31 ----- Assignment_096/solution/readme.md | 5 - Assignment_097/readme.md | 40 ------- Assignment_097/solution/readme.md | 5 - readme.md | 45 ++++---- .../main/java/pr2/lambda/anonymous/Alien.java | 46 -------- .../java/pr2/lambda/anonymous/GameBoard.java | 73 ------------ .../java/pr2/lambda/anonymous/GameMain.java | 28 ----- .../src/main/java/pr2/lambda/local/Alien.java | 46 -------- .../main/java/pr2/lambda/local/GameBoard.java | 72 ------------ .../main/java/pr2/lambda/local/GameMain.java | 28 ----- .../main/java/pr2/lambda/nonstatic/Alien.java | 54 --------- .../java/pr2/lambda/nonstatic/GameBoard.java | 108 ------------------ .../java/pr2/lambda/nonstatic/GameMain.java | 27 ----- .../main/java/pr2/lambda/anonymous/Alien.java | 46 -------- .../java/pr2/lambda/anonymous/GameBoard.java | 62 ---------- .../java/pr2/lambda/anonymous/GameMain.java | 28 ----- .../src/main/java/pr2/lambda/local/Alien.java | 46 -------- .../main/java/pr2/lambda/local/GameBoard.java | 62 ---------- .../main/java/pr2/lambda/local/GameMain.java | 28 ----- .../main/java/pr2/lambda/nonstatic/Alien.java | 54 --------- .../java/pr2/lambda/nonstatic/GameBoard.java | 67 ----------- .../java/pr2/lambda/nonstatic/GameMain.java | 27 ----- 67 files changed, 242 insertions(+), 1263 deletions(-) delete mode 100644 Assignment_095/readme.md delete mode 100644 Assignment_095/solution/readme.md delete mode 100644 Assignment_096/readme.md delete mode 100644 Assignment_096/solution/readme.md delete mode 100644 Assignment_097/readme.md delete mode 100644 Assignment_097/solution/readme.md delete mode 100644 solutions/src/main/java/pr2/lambda/anonymous/Alien.java delete mode 100644 solutions/src/main/java/pr2/lambda/anonymous/GameBoard.java delete mode 100644 solutions/src/main/java/pr2/lambda/anonymous/GameMain.java delete mode 100644 solutions/src/main/java/pr2/lambda/local/Alien.java delete mode 100644 solutions/src/main/java/pr2/lambda/local/GameBoard.java delete mode 100644 solutions/src/main/java/pr2/lambda/local/GameMain.java delete mode 100644 solutions/src/main/java/pr2/lambda/nonstatic/Alien.java delete mode 100644 solutions/src/main/java/pr2/lambda/nonstatic/GameBoard.java delete mode 100644 solutions/src/main/java/pr2/lambda/nonstatic/GameMain.java delete mode 100644 sources/src/main/java/pr2/lambda/anonymous/Alien.java delete mode 100644 sources/src/main/java/pr2/lambda/anonymous/GameBoard.java delete mode 100644 sources/src/main/java/pr2/lambda/anonymous/GameMain.java delete mode 100644 sources/src/main/java/pr2/lambda/local/Alien.java delete mode 100644 sources/src/main/java/pr2/lambda/local/GameBoard.java delete mode 100644 sources/src/main/java/pr2/lambda/local/GameMain.java delete mode 100644 sources/src/main/java/pr2/lambda/nonstatic/Alien.java delete mode 100644 sources/src/main/java/pr2/lambda/nonstatic/GameBoard.java delete mode 100644 sources/src/main/java/pr2/lambda/nonstatic/GameMain.java diff --git a/Assignment_074/readme.md b/Assignment_074/readme.md index d74d209..4957e66 100644 --- a/Assignment_074/readme.md +++ b/Assignment_074/readme.md @@ -1,28 +1,16 @@ -# Anonyme Klasse schreiben +# Eigene compare-Methode schreiben [Musterlösung](solution/) ## Lernziel -Eine anonyme Klasse verwenden, um einen Event-Handler zu implementieren. Den Zugriff der anonymen Klasse auf Attribute der umgebenden Klasse und finale Parameter der Methode nutzen. +Objekte vergleichen. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.anonymous](../sources/src/main/java/pr2/lambda/anonymous/). +Gehen Sie in das Paket [pr2.lambda.array_sorter](../sources/src/main/java/pr2/lambda/array_sorter/). -Für diese Aufgabe müssen Sie das Gameframework einbinden. Sie finden es im `lib`-Ordner: [game_framework.jar](../sources/lib/game_framework.jar) - -In dieser Aufgabe sollen Sie den Event-Handler für das Zerstören des Aliens als anonyme Klasse im Konstruktor von `GameBoard` realisieren. D.h. nicht mehr das Alien selbst reagiert auf das Klicken, sondern das `GameBoard` bekommt alle Klicks und überprüft, ob sich die Maus über dem Alien befindet. - -Fügen Sie dem Konstruktor von `GameBoard` eine anonyme Klasse hinzu, die von `MouseAdapter` erbt. Überschreiben Sie in dieser Klasse die Methode `mousePressed` aus `MouseAdapter`. - -In der `mousePressed`-Methode holen Sie die X- und Y-Koordinate aus dem `MouseEvent` und überprüfen Sie mit der Methode `intersects` von `Alien`, ob sich die Maus auch wirklich über dem Alien befindet. Wenn ja, rufen Sie die `explode`-Methode des Aliens auf. - -Wenn sich der Mauszeiger nicht innerhalb des Aliens befindet, verschieben Sie das Alien (mit der Methode `setPosition`) an die Position des Mauszeigers. - -Übergeben Sie die Instanz der anonymen Klasse der `addMouseListener`-Methode von `GameBoard`. - -Lassen Sie das Programm laufen und überprüfen Sie, ob es das erwartete Verhalten zeigt. +Schreiben Sie ein Java-Programm `ReverseSort`, das ein Array mit `Date`-Objekten erzeugt und dieses dann mithilfe der `Arrays.sort`-Methode in umgekehrter Reihenfolge sortiert. Um die umgekehrte Sortierung zu erhalten, erzeugen Sie bitte direkt im Aufruf der `sort`-Methode einen entsprechenden `Comparator` als anonyme innere Klasse. ## Abgabe (optional) diff --git a/Assignment_074/solution/readme.md b/Assignment_074/solution/readme.md index b349ed6..183c8af 100644 --- a/Assignment_074/solution/readme.md +++ b/Assignment_074/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Anonyme Klasse schreiben +# Lösung: Eigene compare-Methode schreiben Musterlösung: -[pr2.lambda.anonymous](../../solutions/src/main/java/pr2/lambda/anonymous/) +[pr2.lambda.array_sorter](../../solutions/src/main/java/pr2/lambda/array_sorter/) diff --git a/Assignment_075/readme.md b/Assignment_075/readme.md index 4957e66..075bcf9 100644 --- a/Assignment_075/readme.md +++ b/Assignment_075/readme.md @@ -1,16 +1,20 @@ -# Eigene compare-Methode schreiben +# Innere Klasse Beobachter [Musterlösung](solution/) ## Lernziel -Objekte vergleichen. +Zugriff von inneren Klassen auf die umgebende Klasse. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.array_sorter](../sources/src/main/java/pr2/lambda/array_sorter/). +Gehen Sie in das Paket: [pr2.lambda.observer](../sources/src/main/java/pr2/lambda/observer/). -Schreiben Sie ein Java-Programm `ReverseSort`, das ein Array mit `Date`-Objekten erzeugt und dieses dann mithilfe der `Arrays.sort`-Methode in umgekehrter Reihenfolge sortiert. Um die umgekehrte Sortierung zu erhalten, erzeugen Sie bitte direkt im Aufruf der `sort`-Methode einen entsprechenden `Comparator` als anonyme innere Klasse. +Dort finden Sie das Interface `Beobachter`. + +Schreiben Sie eine Klasse `Datenhalter`, die eine einziges, privates Attribut vom Typ `int` enthält. Setzen Sie das Attribut im Konstruktor, erzeugen Sie aber keinen Getter. + +Implementieren Sie das Interface `Beobachter` als nicht-statische, private innere Klasse in `Datenhalter` und erlauben Sie über den Beobachter Zugriff auf das Attribut, indem Sie ein entsprechendes Objekt vom Typ `Beobachter` zurückgeben. Testen Sie Ihre Implementierung mit einem JUnit-Test. ## Abgabe (optional) diff --git a/Assignment_075/solution/readme.md b/Assignment_075/solution/readme.md index 183c8af..fe048c7 100644 --- a/Assignment_075/solution/readme.md +++ b/Assignment_075/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Eigene compare-Methode schreiben +# Lösung: Innere Klasse Beobachter Musterlösung: -[pr2.lambda.array_sorter](../../solutions/src/main/java/pr2/lambda/array_sorter/) +[pr2.lambda.observer](../../solutions/src/main/java/pr2/lambda/observer/). diff --git a/Assignment_076/readme.md b/Assignment_076/readme.md index 075bcf9..4a72e78 100644 --- a/Assignment_076/readme.md +++ b/Assignment_076/readme.md @@ -1,20 +1,20 @@ -# Innere Klasse Beobachter +# Callback mit anonymer Klasse realisieren [Musterlösung](solution/) ## Lernziel -Zugriff von inneren Klassen auf die umgebende Klasse. +Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert. ## Aufgabe -Gehen Sie in das Paket: [pr2.lambda.observer](../sources/src/main/java/pr2/lambda/observer/). +Gehen Sie in das Paket [pr2.lambda.callback](../sources/src/main/java/pr2/lambda/callback/). -Dort finden Sie das Interface `Beobachter`. +In dieser Aufgabe wird ein sehr gängiges Muster benutzt, dass auch bei großen Suchmaschinen zum Einsatz kommt. Über eine Filter-Funktion werden aus einer Menge von Daten diejenigen ausgewählt, die gewünscht sind. Die Auswahlfunktion wird von außen vorgegeben, sodass beliebige Filteroperationen möglich sind, auch solche, die beim Schreiben des Rahmenwerkes noch nicht bekannt waren. -Schreiben Sie eine Klasse `Datenhalter`, die eine einziges, privates Attribut vom Typ `int` enthält. Setzen Sie das Attribut im Konstruktor, erzeugen Sie aber keinen Getter. +Sehen Sie sich das Interface `Prediacte` und die Klasse `NumberSelector` an und versuchen Sie die Funktionsweise der beiden zu verstehen. Betrachten Sie nun die Klasse `Main`, die versucht zuerst die geraden und dann die ungeraden Zahlen auszuwählen und auszugeben. Der hierfür nötige Code ist zwar schon weitgehend vorhanden, aber in der `main`-Methode müssen Sie noch zwei passende Filterfunktionen als **anonyme innere Klassen** realisieren. -Implementieren Sie das Interface `Beobachter` als nicht-statische, private innere Klasse in `Datenhalter` und erlauben Sie über den Beobachter Zugriff auf das Attribut, indem Sie ein entsprechendes Objekt vom Typ `Beobachter` zurückgeben. Testen Sie Ihre Implementierung mit einem JUnit-Test. +Nachdem Sie die beiden Filter geschrieben haben, lassen Sie das Programm laufen und überprüfen Sie, ob wirklich die richtigen Zahlen ausgewählt werden. ## Abgabe (optional) diff --git a/Assignment_076/solution/readme.md b/Assignment_076/solution/readme.md index fe048c7..f3f2c66 100644 --- a/Assignment_076/solution/readme.md +++ b/Assignment_076/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Innere Klasse Beobachter +# Lösung: Callback mit anonymer Klasse realisieren Musterlösung: -[pr2.lambda.observer](../../solutions/src/main/java/pr2/lambda/observer/). +[pr2.lambda.callback](../../solutions/src/main/java/pr2/lambda/callback/) diff --git a/Assignment_077/readme.md b/Assignment_077/readme.md index 4a72e78..da32b09 100644 --- a/Assignment_077/readme.md +++ b/Assignment_077/readme.md @@ -1,20 +1,19 @@ -# Callback mit anonymer Klasse realisieren +# Comparator als Lambda [Musterlösung](solution/) ## Lernziel -Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert. +Lambdas verwenden. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.callback](../sources/src/main/java/pr2/lambda/callback/). +Gehen Sie in das Paket +[pr2.lambda.comparator](../sources/src/main/java/pr2/lambda/comparator/). -In dieser Aufgabe wird ein sehr gängiges Muster benutzt, dass auch bei großen Suchmaschinen zum Einsatz kommt. Über eine Filter-Funktion werden aus einer Menge von Daten diejenigen ausgewählt, die gewünscht sind. Die Auswahlfunktion wird von außen vorgegeben, sodass beliebige Filteroperationen möglich sind, auch solche, die beim Schreiben des Rahmenwerkes noch nicht bekannt waren. +Als Teil der Java-Klassenbibliothek findet sich das Interface `Comparator`, mit dem beim Sortieren eine Sortierreihenfolge vorgeben werden kann. Da es sich um ein funktionales Interface handelt, kann man es auch mit einem Lambda-Ausdruck implementieren. Schauen Sie sich den Aufbau des Interfaces in der JavaDoc an. -Sehen Sie sich das Interface `Prediacte` und die Klasse `NumberSelector` an und versuchen Sie die Funktionsweise der beiden zu verstehen. Betrachten Sie nun die Klasse `Main`, die versucht zuerst die geraden und dann die ungeraden Zahlen auszuwählen und auszugeben. Der hierfür nötige Code ist zwar schon weitgehend vorhanden, aber in der `main`-Methode müssen Sie noch zwei passende Filterfunktionen als **anonyme innere Klassen** realisieren. - -Nachdem Sie die beiden Filter geschrieben haben, lassen Sie das Programm laufen und überprüfen Sie, ob wirklich die richtigen Zahlen ausgewählt werden. +Sortieren Sie ein Array von Zahlen (repräsentiert als `Integer`, nicht als `int`) in _absteigender_ Reihenfolge mithilfe der Methode `sort` der Klasse `Arrays` und geben Sie ihr einen entsprechenden `Comparator` als Lambda-Ausdruck mit. ## Abgabe (optional) diff --git a/Assignment_077/solution/readme.md b/Assignment_077/solution/readme.md index f3f2c66..43f250d 100644 --- a/Assignment_077/solution/readme.md +++ b/Assignment_077/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Callback mit anonymer Klasse realisieren +# Lösung: Comparator als Lambda Musterlösung: -[pr2.lambda.callback](../../solutions/src/main/java/pr2/lambda/callback/) +[pr2.lambda.comparator](../../solutions/src/main/java/pr2/lambda/comparator/) diff --git a/Assignment_078/readme.md b/Assignment_078/readme.md index da32b09..3916f96 100644 --- a/Assignment_078/readme.md +++ b/Assignment_078/readme.md @@ -1,19 +1,22 @@ -# Comparator als Lambda +# Callback mit Lambda realisieren [Musterlösung](solution/) ## Lernziel -Lambdas verwenden. +Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als Lambda realisiert. ## Aufgabe -Gehen Sie in das Paket -[pr2.lambda.comparator](../sources/src/main/java/pr2/lambda/comparator/). +Gehen Sie in das Paket [pr2.lambda.lambdas](../sources/src/main/java/pr2/lambda/lambdas/). -Als Teil der Java-Klassenbibliothek findet sich das Interface `Comparator`, mit dem beim Sortieren eine Sortierreihenfolge vorgeben werden kann. Da es sich um ein funktionales Interface handelt, kann man es auch mit einem Lambda-Ausdruck implementieren. Schauen Sie sich den Aufbau des Interfaces in der JavaDoc an. +In dieser Aufgabe wird ein sehr gängiges Muster benutzt, dass auch bei großen Suchmaschinen zum Einsatz kommt. Über eine Filter-Funktion werden aus einer Menge von Daten diejenigen ausgewählt, die gewünscht sind. Die Auswahlfunktion wird von außen vorgegeben, sodass beliebige Filteroperationen möglich sind, auch solche, die beim Schreiben des Rahmenwerkes noch nicht bekannt waren. -Sortieren Sie ein Array von Zahlen (repräsentiert als `Integer`, nicht als `int`) in _absteigender_ Reihenfolge mithilfe der Methode `sort` der Klasse `Arrays` und geben Sie ihr einen entsprechenden `Comparator` als Lambda-Ausdruck mit. +Sehen Sie sich das Interface `Predicate` und die Klasse `NumberSelector` an und versuchen Sie die Funktionsweise der beiden zu verstehen. Betrachten Sie nun die Klasse `Main`, die versucht zuerst die geraden und dann die ungeraden Zahlen auszuwählen und auszugeben. Der hierfür nötige Code ist zwar schon weitgehend vorhanden, aber in der `main`-Methode müssen Sie noch zwei passende Filterfunktionen als **Lambda** realisieren. + +Nachdem Sie die beiden Filter geschrieben haben, lassen Sie das Programm laufen und überprüfen Sie, ob wirklich die richtigen Zahlen ausgewählt werden. + +Vergleichen Sie die Lösung mit Lambdas mit der aus der vorhergehenden Aufgabe, die auf anonymen inneren Klassen basiert hat. ## Abgabe (optional) diff --git a/Assignment_078/solution/readme.md b/Assignment_078/solution/readme.md index 43f250d..dec56e3 100644 --- a/Assignment_078/solution/readme.md +++ b/Assignment_078/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Comparator als Lambda +# Lösung: Callback mit Lambda realisieren Musterlösung: -[pr2.lambda.comparator](../../solutions/src/main/java/pr2/lambda/comparator/) +[pr2.lambda.lambdas](../../solutions/src/main/java/pr2/lambda/lambdas/) diff --git a/Assignment_079/readme.md b/Assignment_079/readme.md index 3916f96..1bb5de3 100644 --- a/Assignment_079/readme.md +++ b/Assignment_079/readme.md @@ -1,22 +1,18 @@ -# Callback mit Lambda realisieren +# MatrixSuche [Musterlösung](solution/) ## Lernziel -Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als Lambda realisiert. +Statische innere Klassen einsetzen. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.lambdas](../sources/src/main/java/pr2/lambda/lambdas/). +Gehen Sie in das Paket [pr2.lambda.matrixsuche](../sources/src/main/java/pr2/lambda/matrixsuche/). -In dieser Aufgabe wird ein sehr gängiges Muster benutzt, dass auch bei großen Suchmaschinen zum Einsatz kommt. Über eine Filter-Funktion werden aus einer Menge von Daten diejenigen ausgewählt, die gewünscht sind. Die Auswahlfunktion wird von außen vorgegeben, sodass beliebige Filteroperationen möglich sind, auch solche, die beim Schreiben des Rahmenwerkes noch nicht bekannt waren. +Schreiben Sie eine Klasse `MatrixSuche`, die eine statische Methode `findEntry` anbietet. Die Methode soll in einem zweidimensionalen `int`-Array nach einem gegebenen Eintrag suchen und die Position des gefundenen Eintrags in der Matrix zurückgeben. Um die Position zurückzugeben, verwenden Sie bitte eine statische innere Klasse namens `Position`, die die x- und y-Postion enthält. -Sehen Sie sich das Interface `Predicate` und die Klasse `NumberSelector` an und versuchen Sie die Funktionsweise der beiden zu verstehen. Betrachten Sie nun die Klasse `Main`, die versucht zuerst die geraden und dann die ungeraden Zahlen auszuwählen und auszugeben. Der hierfür nötige Code ist zwar schon weitgehend vorhanden, aber in der `main`-Methode müssen Sie noch zwei passende Filterfunktionen als **Lambda** realisieren. - -Nachdem Sie die beiden Filter geschrieben haben, lassen Sie das Programm laufen und überprüfen Sie, ob wirklich die richtigen Zahlen ausgewählt werden. - -Vergleichen Sie die Lösung mit Lambdas mit der aus der vorhergehenden Aufgabe, die auf anonymen inneren Klassen basiert hat. +Überschreiben Sie die `toString`-Methode in `Position` und testen Sie, ob Ihre Implementierung richtig funktioniert. ## Abgabe (optional) diff --git a/Assignment_079/solution/readme.md b/Assignment_079/solution/readme.md index dec56e3..e3b7c01 100644 --- a/Assignment_079/solution/readme.md +++ b/Assignment_079/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Callback mit Lambda realisieren +# Lösung: MatrixSuche Musterlösung: -[pr2.lambda.lambdas](../../solutions/src/main/java/pr2/lambda/lambdas/) +[pr2.lambda.matrixsuche](../../solutions/src/main/java/pr2/lambda/matrixsuche/) diff --git a/Assignment_080/readme.md b/Assignment_080/readme.md index e49166c..9f77b27 100644 --- a/Assignment_080/readme.md +++ b/Assignment_080/readme.md @@ -1,26 +1,24 @@ -# Lokale Klasse schreiben +# StringTransmogrifier [Musterlösung](solution/) ## Lernziel -Eine lokale Klasse verwenden, um einen Event-Handler zu implementieren. Den Zugriff der lokalen Klasse auf Attribute der umgebenden Klasse und finale Parameter der Methode nutzen. +Funktionale Interfaces entwerfen und verwenden. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.local](../sources/src/main/java/pr2/lambda/local/). +Gehen Sie in das Paket [pr2.lambda.mogrifier_1](../sources/src/main/java/pr2/lambda/mogrifier_1/). -Für diese Aufgabe müssen Sie das Gameframework einbinden. Sie finden es im `lib`-Ordner: [game_framework.jar](../sources/lib/game_framework.jar) +Schreiben Sie ein funktionales Interface namens `StringFunction`. Die Methode des Interfaces nimmt eine String und gibt einen String zurück. -In dieser Aufgabe sollen Sie den Event-Handler für das Zerstören des Aliens als lokale Klasse im Konstruktor von `GameBoard` realisieren. D.h. nicht mehr das Alien selbst reagiert auf das Klicken, sondern das `GameBoard` bekommt alle Klicks und überprüft, ob sich die Maus über dem Alien befindet. +Schreiben Sie eine Klasse `StringTransmogrifier`, die eine statische Methode `transmogrify` hat, der man ein String-Array und eine `StringFunction` übergibt. Die Methode wendet die Funktion auf jedes Element des Arrays an und gibt ein neues Array mit dem Ergebnis zurück. -Fügen Sie dem Konstruktor von `GameBoard` eine lokale Klasse `AlienExploder` hinzu, die von `MouseAdapter` erbt. Überschreiben Sie in dieser Klasse die Methode `mousePressed` aus `MouseAdapter`. +Schreiben Sie eine Klasse `StringTransmogrifierTest`, die ein String-Array erzeugt und dann mithilfe der Klasse `StringTransmogrifier` die Elemente verändert. Nehmen Sie folgende Änderungen am Array vor, indem Sie entsprechende Lambda-Ausdrücke oder Methodenreferenzen übergeben: -In der `mousePressed`-Methode holen Sie die X- und Y-Koordinate aus dem `MouseEvent` und überprüfen Sie mit der Methode `intersects` von `Alien`, ob sich die Maus auch wirklich über dem Alien befindet. Wenn ja, rufen Sie die `explode`-Methode des Aliens auf. - -Erzeugen Sie nach der Deklaration der Klasse `AlienExploder` eine Instanz von dieser und übergeben Sie das Objekt der `addMouseListener`-Methode von `GameBoard`. - -Lassen Sie das Programm laufen und überprüfen Sie, ob es das erwartete Verhalten zeigt. + * Umwandeln aller Buchstaben in Kleinbuchstaben. + * Umwandeln aller Buchstaben in Großbuchstaben. + * Ersetzen jedes Buchstaben durch den im Alphabet folgenden. ## Abgabe (optional) diff --git a/Assignment_080/solution/readme.md b/Assignment_080/solution/readme.md index c7ab6e7..8bf44e0 100644 --- a/Assignment_080/solution/readme.md +++ b/Assignment_080/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Lokale Klasse schreiben +# Lösung: StringTransmogrifier Musterlösung: -[pr2.lambda.local](../../solutions/src/main/java/pr2/lambda/local/) +[pr2.lambda.mogrifier_1](../../solutions/src/main/java/pr2/lambda/mogrifier_1/) diff --git a/Assignment_081/readme.md b/Assignment_081/readme.md index 1bb5de3..2b68bbd 100644 --- a/Assignment_081/readme.md +++ b/Assignment_081/readme.md @@ -1,18 +1,18 @@ -# MatrixSuche +# StringTransmogrifier erweitern [Musterlösung](solution/) ## Lernziel -Statische innere Klassen einsetzen. +Funktionale Interfaces entwerfen und verwenden. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.matrixsuche](../sources/src/main/java/pr2/lambda/matrixsuche/). +Gehen Sie in das Paket [pr2.lambda.mogrifier_2](../sources/src/main/java/pr2/lambda/mogrifier_2/). -Schreiben Sie eine Klasse `MatrixSuche`, die eine statische Methode `findEntry` anbietet. Die Methode soll in einem zweidimensionalen `int`-Array nach einem gegebenen Eintrag suchen und die Position des gefundenen Eintrags in der Matrix zurückgeben. Um die Position zurückzugeben, verwenden Sie bitte eine statische innere Klasse namens `Position`, die die x- und y-Postion enthält. +Ausgehend von der vorhergehenden Aufgabe, erweitern Sie das Interface `StringFunction` um eine _statische Methode_ namens `caesar`, mit der man sich eine `StringFunction` erzeugen lassen kann, die die Buchstaben des Strings um einen frei wählbaren Wert verschiebt. -Überschreiben Sie die `toString`-Methode in `Position` und testen Sie, ob Ihre Implementierung richtig funktioniert. +Teste Sie Ihre Implementierung wieder mit `StringTransmogrifierTest`. ## Abgabe (optional) diff --git a/Assignment_081/solution/readme.md b/Assignment_081/solution/readme.md index e3b7c01..9746d8f 100644 --- a/Assignment_081/solution/readme.md +++ b/Assignment_081/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: MatrixSuche +# Lösung: StringTransmogrifier erweitern Musterlösung: -[pr2.lambda.matrixsuche](../../solutions/src/main/java/pr2/lambda/matrixsuche/) +[pr2.lambda.mogrifier_2](../../solutions/src/main/java/pr2/lambda/mogrifier_2/) diff --git a/Assignment_082/readme.md b/Assignment_082/readme.md index 9f77b27..f8d84fc 100644 --- a/Assignment_082/readme.md +++ b/Assignment_082/readme.md @@ -1,24 +1,20 @@ -# StringTransmogrifier +# Static Member Class [Musterlösung](solution/) ## Lernziel -Funktionale Interfaces entwerfen und verwenden. +Eine Klasse als statische Elementklasse realisieren. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.mogrifier_1](../sources/src/main/java/pr2/lambda/mogrifier_1/). +Gehen Sie in das Paket [pr2.lambda.static_member](../sources/src/main/java/pr2/lambda/static_member/). -Schreiben Sie ein funktionales Interface namens `StringFunction`. Die Methode des Interfaces nimmt eine String und gibt einen String zurück. +In dieser Aufgabe finden Sie bereits ein voll funktionsfähiges Beispiel vor. Lassen Sie es laufen und machen Sie sich mit der Funktionsweise vertraut. (Das Spiel kennen Sie bereits aus einer vorhergehenden Aufgabe, nur die Grafik ist etwas anders.) -Schreiben Sie eine Klasse `StringTransmogrifier`, die eine statische Methode `transmogrify` hat, der man ein String-Array und eine `StringFunction` übergibt. Die Methode wendet die Funktion auf jedes Element des Arrays an und gibt ein neues Array mit dem Ergebnis zurück. +Ihre Aufgabe besteht nun darin, die Klasse `Alien` zu einer statischen Elementklasse der Klasse `GameBoard` zu machen. -Schreiben Sie eine Klasse `StringTransmogrifierTest`, die ein String-Array erzeugt und dann mithilfe der Klasse `StringTransmogrifier` die Elemente verändert. Nehmen Sie folgende Änderungen am Array vor, indem Sie entsprechende Lambda-Ausdrücke oder Methodenreferenzen übergeben: - - * Umwandeln aller Buchstaben in Kleinbuchstaben. - * Umwandeln aller Buchstaben in Großbuchstaben. - * Ersetzen jedes Buchstaben durch den im Alphabet folgenden. +Lassen Sie das Programm nach der Änderung wieder laufen und schauen überprüfen Sie, dass es sich noch korrekt verhält. ## Abgabe (optional) diff --git a/Assignment_082/solution/readme.md b/Assignment_082/solution/readme.md index 8bf44e0..75f6291 100644 --- a/Assignment_082/solution/readme.md +++ b/Assignment_082/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: StringTransmogrifier +# Lösung: Static Member Class Musterlösung: -[pr2.lambda.mogrifier_1](../../solutions/src/main/java/pr2/lambda/mogrifier_1/) +[pr2.lambda.static_member](../../solutions/src/main/java/pr2/lambda/static_member/) diff --git a/Assignment_083/readme.md b/Assignment_083/readme.md index 2b68bbd..3371860 100644 --- a/Assignment_083/readme.md +++ b/Assignment_083/readme.md @@ -1,18 +1,20 @@ -# StringTransmogrifier erweitern +# Iterator schreiben [Musterlösung](solution/) ## Lernziel -Funktionale Interfaces entwerfen und verwenden. +Für eine gegebene Klasse einen Iterator schreiben. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.mogrifier_2](../sources/src/main/java/pr2/lambda/mogrifier_2/). +Gehen Sie in das Paket [pr2.collections.iterator](../sources/src/main/java/pr2/collections/iterator/). -Ausgehend von der vorhergehenden Aufgabe, erweitern Sie das Interface `StringFunction` um eine _statische Methode_ namens `caesar`, mit der man sich eine `StringFunction` erzeugen lassen kann, die die Buchstaben des Strings um einen frei wählbaren Wert verschiebt. +In dieser Aufgabe sollen Sie für eine bereits vorhandene Klasse einen Iterator schreiben. Bei dieser Klasse (`SimpleStack`) handelt es sich um einen sehr einfach (und nicht sehr sicher) programmierten Stack. -Teste Sie Ihre Implementierung wieder mit `StringTransmogrifierTest`. +Implementieren Sie in `SimpleStack` das Interface `Iterable` und schreiben Sie, wie vom Interface verlangt einen Iterator für die Klasse. Sie sollten hier innere Klasse verwenden, um den Zugriff auf die privaten Attribute von `SimpleStack` zu vereinfachen. + +Benutzen Sie die Tests in `SimpleStackTest`, um zu überprüfen, dass Ihre Implementierung des Iterators richtig funktioniert. Hierzu müssen Sie die entsprechenden Tests allerdings erst einkommentieren. ## Abgabe (optional) diff --git a/Assignment_083/solution/readme.md b/Assignment_083/solution/readme.md index 9746d8f..2af19d3 100644 --- a/Assignment_083/solution/readme.md +++ b/Assignment_083/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: StringTransmogrifier erweitern +# Lösung: Iterator schreiben Musterlösung: -[pr2.lambda.mogrifier_2](../../solutions/src/main/java/pr2/lambda/mogrifier_2/) +[pr2.collections.iterator](../../solutions/src/main/java/pr2/collections/iterator/) diff --git a/Assignment_084/readme.md b/Assignment_084/readme.md index c856a42..1af5096 100644 --- a/Assignment_084/readme.md +++ b/Assignment_084/readme.md @@ -1,20 +1,22 @@ -# Nonstatic Member Class +# Mithilfe eines Iterators über Daten iterieren [Musterlösung](solution/) ## Lernziel -Eine nichtstatische Elementklasse verwenden. +Den Iterator einer vorhandenen Klasse verwenden, um Daten auszulesen. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.nonstatic](../sources/src/main/java/pr2/lambda/nonstatic/). +Gehen Sie in das Paket [pr2.collections.iterieren](../sources/src/main/java/pr2/collections/iterieren/). -Für diese Aufgabe müssen Sie das Gameframework einbinden. Sie finden es im `lib`-Ordner: [game_framework.jar](../sources/lib/game_framework.jar) +Bei dieser Aufgabe werden Sie mit einem `Iterator` über eine Menge von Objekten iterieren. Die Besonderheit besteht darin, dass der Iterator keine feste Menge von Objekten liefert, sondern diese zufällig generiert. Dies ist zwar ungewöhnlich, soll aber zeigen, dass beim Iterieren nicht zwangsläufig bei jedem Durchlauf dieselben Daten kommen. -Wieder geht es um das einfache Spiel. Diesmal sollen Sie allerdings die Klasse `Alien` zu einer nichtstatischen Elementklasse von `GameBoard` machen. Achten Sie insbesondere darauf, dass sie nur noch die implizite Referenz `GameBoard.this` verwenden, um das Board innerhalb von `Alien` zu verwenden. Außerdem soll sich `Alien` im Konstruktor selbst als `MouseListener` registrieren, d.h. die entsprechende Zeile `addMouseListener(alien);` soll aus `GameBoard` verschwinden und in `Alien` verwendet werden. +Betrachten Sie die Klasse `CoinGenerator` und versuchen Sie deren Funktionsweise zu verstehen. Schauen Sie sich insbesondere an, wie der Iterator in dieser Klasse implementiert ist. -Lassen Sie das Spiel wieder laufen und überprüfen Sie, ob es korrekt funktioniert. +Modifizieren Sie nun die Klasse `GameBoard` so, dass sie den `CoinGenerator` verwendet, um Münzen zu erzeugen und diese dann auf dem Bildschirm anzuzeigen. Überlegen Sie sich, ob Sie die erzeugten Münzen zwischenspeichern müssen oder ob Sie den Iterator direkt in der `drawGame`-Methode verwenden können. + +Implementieren Sie Ihre Lösung und lassen Sie diese laufen, um sie zu testen. ## Abgabe (optional) diff --git a/Assignment_084/solution/readme.md b/Assignment_084/solution/readme.md index c993b1e..a052299 100644 --- a/Assignment_084/solution/readme.md +++ b/Assignment_084/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Nonstatic Member Class +# Lösung: Mithilfe eines Iterators über Daten iterieren Musterlösung: -[pr2.lambda.nonstatic](../../solutions/src/main/java/pr2/lambda/nonstatic/) +[pr2.collections.iterieren](../../solutions/src/main/java/pr2/collections/iterieren/) diff --git a/Assignment_085/readme.md b/Assignment_085/readme.md index f8d84fc..03fc5f4 100644 --- a/Assignment_085/readme.md +++ b/Assignment_085/readme.md @@ -1,20 +1,16 @@ -# Static Member Class +# Iterator programmieren [Musterlösung](solution/) ## Lernziel -Eine Klasse als statische Elementklasse realisieren. +Iteratoren verstehen und programmieren. ## Aufgabe -Gehen Sie in das Paket [pr2.lambda.static_member](../sources/src/main/java/pr2/lambda/static_member/). +Im Paket [pr2.collections.list_iterator](../sources/src/main/java/pr2/collections/list_iterator/) finden Sie den Code für eine einfach verkettete Liste `Liste`. -In dieser Aufgabe finden Sie bereits ein voll funktionsfähiges Beispiel vor. Lassen Sie es laufen und machen Sie sich mit der Funktionsweise vertraut. (Das Spiel kennen Sie bereits aus einer vorhergehenden Aufgabe, nur die Grafik ist etwas anders.) - -Ihre Aufgabe besteht nun darin, die Klasse `Alien` zu einer statischen Elementklasse der Klasse `GameBoard` zu machen. - -Lassen Sie das Programm nach der Änderung wieder laufen und schauen überprüfen Sie, dass es sich noch korrekt verhält. +Geben Sie bitte den fehlenden Code für die innere Klasse `ListenIterator` an. ## Abgabe (optional) diff --git a/Assignment_085/solution/readme.md b/Assignment_085/solution/readme.md index 75f6291..85889cd 100644 --- a/Assignment_085/solution/readme.md +++ b/Assignment_085/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Static Member Class +# Lösung: Iterator programmieren Musterlösung: -[pr2.lambda.static_member](../../solutions/src/main/java/pr2/lambda/static_member/) +[pr2.collections.list_iterator](../../solutions/src/main/java/pr2/collections/list_iterator/) diff --git a/Assignment_086/readme.md b/Assignment_086/readme.md index 3371860..48a6673 100644 --- a/Assignment_086/readme.md +++ b/Assignment_086/readme.md @@ -1,20 +1,24 @@ -# Iterator schreiben +# `List` und dessen Implementierungen [Musterlösung](solution/) ## Lernziel -Für eine gegebene Klasse einen Iterator schreiben. +Das Interface `List` und eine passende Implementierung einsetzen. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.iterator](../sources/src/main/java/pr2/collections/iterator/). +Gehen Sie in das Paket [pr2.collections.list](../sources/src/main/java/pr2/collections/list/). -In dieser Aufgabe sollen Sie für eine bereits vorhandene Klasse einen Iterator schreiben. Bei dieser Klasse (`SimpleStack`) handelt es sich um einen sehr einfach (und nicht sehr sicher) programmierten Stack. +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. -Implementieren Sie in `SimpleStack` das Interface `Iterable` und schreiben Sie, wie vom Interface verlangt einen Iterator für die Klasse. Sie sollten hier innere Klasse verwenden, um den Zugriff auf die privaten Attribute von `SimpleStack` zu vereinfachen. +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. -Benutzen Sie die Tests in `SimpleStackTest`, um zu überprüfen, dass Ihre Implementierung des Iterators richtig funktioniert. Hierzu müssen Sie die entsprechenden Tests allerdings erst einkommentieren. +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. + +Ändern Sie die Klasse nun so, dass anstatt Arrays `List` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. + +__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. ## Abgabe (optional) diff --git a/Assignment_086/solution/readme.md b/Assignment_086/solution/readme.md index 2af19d3..6157b4c 100644 --- a/Assignment_086/solution/readme.md +++ b/Assignment_086/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Iterator schreiben +# Lösung: `List` und dessen Implementierungen Musterlösung: -[pr2.collections.iterator](../../solutions/src/main/java/pr2/collections/iterator/) +[pr2.collections.list](../../solutions/src/main/java/pr2/collections/list/) diff --git a/Assignment_087/readme.md b/Assignment_087/readme.md index 1af5096..6432de9 100644 --- a/Assignment_087/readme.md +++ b/Assignment_087/readme.md @@ -1,22 +1,38 @@ -# Mithilfe eines Iterators über Daten iterieren +# `Map` verwenden [Musterlösung](solution/) ## Lernziel -Den Iterator einer vorhandenen Klasse verwenden, um Daten auszulesen. +Das Interface `Map` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.iterieren](../sources/src/main/java/pr2/collections/iterieren/). +Gehen Sie in das Paket [pr2.collections.map](../sources/src/main/java/pr2/collections/map/). -Bei dieser Aufgabe werden Sie mit einem `Iterator` über eine Menge von Objekten iterieren. Die Besonderheit besteht darin, dass der Iterator keine feste Menge von Objekten liefert, sondern diese zufällig generiert. Dies ist zwar ungewöhnlich, soll aber zeigen, dass beim Iterieren nicht zwangsläufig bei jedem Durchlauf dieselben Daten kommen. +In dieser Aufgabe geht es darum, die Häufigkeit von Wörtern in einem Text zu analysieren. Ein grundlegendes Gerüst für das Programm ist auch bereits vorgegeben, damit Sie sich auf das Wesentliche konzentrieren können. -Betrachten Sie die Klasse `CoinGenerator` und versuchen Sie deren Funktionsweise zu verstehen. Schauen Sie sich insbesondere an, wie der Iterator in dieser Klasse implementiert ist. +Betrachten Sie die Klasse `WordCount`. In dieser fehlen noch einige Elemente, damit das Programm korrekt funktionieren kann. -Modifizieren Sie nun die Klasse `GameBoard` so, dass sie den `CoinGenerator` verwendet, um Münzen zu erzeugen und diese dann auf dem Bildschirm anzuzeigen. Überlegen Sie sich, ob Sie die erzeugten Münzen zwischenspeichern müssen oder ob Sie den Iterator direkt in der `drawGame`-Methode verwenden können. +Die innere Klasse `WordFrequency` muss das Sortieren unterstützen. Implementieren Sie daher das Interface `Comparable`. -Implementieren Sie Ihre Lösung und lassen Sie diese laufen, um sie zu testen. +Fügen Sie in der Klasse `WordCount` an den durch TODO-Kommentare markierten Stellen Code hinzu, der mithilfe einer Map die Worthäufigkeiten bestimmt. + +Lassen Sie das Programm laufen. Es sollte eine Ausgabe wie folgt erzeugen: + +```console +er: 80 +sie: 66 +und: 64 +die: 59 +der: 51 +zu: 46 +es: 45 +nicht: 41 +das: 38 +in: 35 +... +``` ## Abgabe (optional) diff --git a/Assignment_087/solution/readme.md b/Assignment_087/solution/readme.md index a052299..cd64cf7 100644 --- a/Assignment_087/solution/readme.md +++ b/Assignment_087/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Mithilfe eines Iterators über Daten iterieren +# Lösung: `Map` verwenden Musterlösung: -[pr2.collections.iterieren](../../solutions/src/main/java/pr2/collections/iterieren/) +[pr2.collections.map](../../solutions/src/main/java/pr2/collections/map/) diff --git a/Assignment_088/readme.md b/Assignment_088/readme.md index 03fc5f4..45da4e9 100644 --- a/Assignment_088/readme.md +++ b/Assignment_088/readme.md @@ -1,16 +1,18 @@ -# Iterator programmieren +# ReverserGeneric [Musterlösung](solution/) ## Lernziel -Iteratoren verstehen und programmieren. +`Comparable` verstehen und nutzen. ## Aufgabe -Im Paket [pr2.collections.list_iterator](../sources/src/main/java/pr2/collections/list_iterator/) finden Sie den Code für eine einfach verkettete Liste `Liste`. +Gehen Sie in das Paket [pr2.collections.reverser_generic](../sources/src/main/java/pr2/collections/reverser_generic/). -Geben Sie bitte den fehlenden Code für die innere Klasse `ListenIterator` an. +Schreiben Sie bitte eine generische Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von Objekten übergeben kann und diese absteigend sortiert wird. Stellen Sie durch korrekte Wahl des Typ-Parameters sicher, dass die in der Liste gespeicherten Objekte das Interface `Comparable` implementieren. + +Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. ## Abgabe (optional) diff --git a/Assignment_088/solution/readme.md b/Assignment_088/solution/readme.md index 85889cd..727c05e 100644 --- a/Assignment_088/solution/readme.md +++ b/Assignment_088/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Iterator programmieren +# Lösung: ReverserGeneric Musterlösung: -[pr2.collections.list_iterator](../../solutions/src/main/java/pr2/collections/list_iterator/) +[pr2.collections.reverser_generic](../../solutions/src/main/java/pr2/collections/reverser_generic/) diff --git a/Assignment_089/readme.md b/Assignment_089/readme.md index 48a6673..6770802 100644 --- a/Assignment_089/readme.md +++ b/Assignment_089/readme.md @@ -1,24 +1,18 @@ -# `List` und dessen Implementierungen +# Strings umgekehrt sortieren: Reverser [Musterlösung](solution/) ## Lernziel -Das Interface `List` und eine passende Implementierung einsetzen. +`Comparable` verstehen und nutzen. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.list](../sources/src/main/java/pr2/collections/list/). +Gehen Sie in das Paket [pr2.collections.reverser](../sources/src/main/java/pr2/collections/reverser/). -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. +Schreiben Sie bitte eine Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von `String` übergeben kann und die diese dann absteigend sortiert, d.h. als Erstes kommen die Einträge mit Z, dann die mit Y etc. -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. - -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. - -Ändern Sie die Klasse nun so, dass anstatt Arrays `List` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. - -__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. +Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. ## Abgabe (optional) diff --git a/Assignment_089/solution/readme.md b/Assignment_089/solution/readme.md index 6157b4c..297fa12 100644 --- a/Assignment_089/solution/readme.md +++ b/Assignment_089/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: `List` und dessen Implementierungen +# Lösung: Strings umgekehrt sortieren: Reverser Musterlösung: -[pr2.collections.list](../../solutions/src/main/java/pr2/collections/list/) +[pr2.collections.reverser](../../solutions/src/main/java/pr2/collections/reverser/) diff --git a/Assignment_090/readme.md b/Assignment_090/readme.md index 6432de9..8f28425 100644 --- a/Assignment_090/readme.md +++ b/Assignment_090/readme.md @@ -1,38 +1,24 @@ -# `Map` verwenden +# `Set` und dessen Implementierungen [Musterlösung](solution/) ## Lernziel -Das Interface `Map` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten. +Das Interface `Set` und eine passende Implementierung einsetzen. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.map](../sources/src/main/java/pr2/collections/map/). +Gehen Sie in das Paket [pr2.collections.set](../sources/src/main/java/pr2/collections/set/). -In dieser Aufgabe geht es darum, die Häufigkeit von Wörtern in einem Text zu analysieren. Ein grundlegendes Gerüst für das Programm ist auch bereits vorgegeben, damit Sie sich auf das Wesentliche konzentrieren können. +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. -Betrachten Sie die Klasse `WordCount`. In dieser fehlen noch einige Elemente, damit das Programm korrekt funktionieren kann. +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. -Die innere Klasse `WordFrequency` muss das Sortieren unterstützen. Implementieren Sie daher das Interface `Comparable`. +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. -Fügen Sie in der Klasse `WordCount` an den durch TODO-Kommentare markierten Stellen Code hinzu, der mithilfe einer Map die Worthäufigkeiten bestimmt. +Ändern Sie die Klasse nun so, dass anstatt Arrays `Set` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `Set` bzw. `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Sets und Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. -Lassen Sie das Programm laufen. Es sollte eine Ausgabe wie folgt erzeugen: - -```console -er: 80 -sie: 66 -und: 64 -die: 59 -der: 51 -zu: 46 -es: 45 -nicht: 41 -das: 38 -in: 35 -... -``` +__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. ## Abgabe (optional) diff --git a/Assignment_090/solution/readme.md b/Assignment_090/solution/readme.md index cd64cf7..a7c6da7 100644 --- a/Assignment_090/solution/readme.md +++ b/Assignment_090/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: `Map` verwenden +# Lösung: `Set` und dessen Implementierungen Musterlösung: -[pr2.collections.map](../../solutions/src/main/java/pr2/collections/map/) +[pr2.collections.set](../../solutions/src/main/java/pr2/collections/set/) diff --git a/Assignment_091/readme.md b/Assignment_091/readme.md index 45da4e9..b094686 100644 --- a/Assignment_091/readme.md +++ b/Assignment_091/readme.md @@ -1,18 +1,27 @@ -# ReverserGeneric +# CommandLineSorter [Musterlösung](solution/) ## Lernziel -`Comparable` verstehen und nutzen. +Sortieren von Collections. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.reverser_generic](../sources/src/main/java/pr2/collections/reverser_generic/). +Gehen Sie in das Paket [pr2.collections.sorter_1](../sources/src/main/java/pr2/collections/sorter_1/). -Schreiben Sie bitte eine generische Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von Objekten übergeben kann und diese absteigend sortiert wird. Stellen Sie durch korrekte Wahl des Typ-Parameters sicher, dass die in der Liste gespeicherten Objekte das Interface `Comparable` implementieren. +Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. -Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. +```console +> java CommandLineSorter Albert Dieter Sigmund Thomas Frank Dieter Herbert +Albert +Dieter +Dieter +Frank +Herbert +Sigmund +Thomas +``` ## Abgabe (optional) diff --git a/Assignment_091/solution/readme.md b/Assignment_091/solution/readme.md index 727c05e..6c8a0cf 100644 --- a/Assignment_091/solution/readme.md +++ b/Assignment_091/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: ReverserGeneric +# Lösung: CommandLineSorter Musterlösung: -[pr2.collections.reverser_generic](../../solutions/src/main/java/pr2/collections/reverser_generic/) +[pr2.collections.sorter_1](../../solutions/src/main/java/pr2/collections/sorter_1/) diff --git a/Assignment_092/readme.md b/Assignment_092/readme.md index 6770802..45b249d 100644 --- a/Assignment_092/readme.md +++ b/Assignment_092/readme.md @@ -1,18 +1,26 @@ -# Strings umgekehrt sortieren: Reverser +# CommandLineSorter -- Version 2 [Musterlösung](solution/) ## Lernziel -`Comparable` verstehen und nutzen. +Sortieren von Collections. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.reverser](../sources/src/main/java/pr2/collections/reverser/). +Gehen Sie in das Paket [pr2.collections.sorter_2](../sources/src/main/java/pr2/collections/sorter_2/). -Schreiben Sie bitte eine Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von `String` übergeben kann und die diese dann absteigend sortiert, d.h. als Erstes kommen die Einträge mit Z, dann die mit Y etc. +Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. Hierbei sollen alle Dubletten entfernt werden, d.h. es soll kein Wort doppelt in der Liste auftauchen. -Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. +```console +> java CommandLineSorter Albert Dieter Sigmund Dieter Thomas Frank Herbert +Albert +Dieter +Frank +Herbert +Sigmund +Thomas +``` ## Abgabe (optional) diff --git a/Assignment_092/solution/readme.md b/Assignment_092/solution/readme.md index 297fa12..be55751 100644 --- a/Assignment_092/solution/readme.md +++ b/Assignment_092/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: Strings umgekehrt sortieren: Reverser +# Lösung: CommandLineSorter -- Version 2 Musterlösung: -[pr2.collections.reverser](../../solutions/src/main/java/pr2/collections/reverser/) +[pr2.collections.sorter_2](../../solutions/src/main/java/pr2/collections/sorter_2/) diff --git a/Assignment_093/readme.md b/Assignment_093/readme.md index 8f28425..9db1174 100644 --- a/Assignment_093/readme.md +++ b/Assignment_093/readme.md @@ -1,24 +1,22 @@ -# `Set` und dessen Implementierungen +# `Comparator` verwenden und Objekte sortieren [Musterlösung](solution/) ## Lernziel -Das Interface `Set` und eine passende Implementierung einsetzen. +Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator` realisieren. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.set](../sources/src/main/java/pr2/collections/set/). +Gehen Sie in das Paket [pr2.collections.sortieren](../sources/src/main/java/pr2/collections/sortieren/). -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. +Sie finden in der Aufgabe bereits die Klasse `Sorter` und den JUnit-Test `SorterTest` vor. Schauen Sie sich die Klasse `Sorter` an und versuchen Sie anhand der JavaDoc und des bereits vorhandenen Codes zu verstehen, was die Klasse machen soll. -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. +Lassen Sie den Test laufen. Sie werden feststellen, dass ein Testfall grün ist, obwohl in `Sorter` gar keine Implementierung vorhanden ist. Versuchen Sie herauszufinden, warum dies so ist. -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. +Fügen Sie nun den fehlenden Code in die Klasse `Sorter` ein, und geben Sie entsprechende `Comparator`-Objekte zurück, sodass die Daten entsprechend dem Parameter `order` sortiert werden können. -Ändern Sie die Klasse nun so, dass anstatt Arrays `Set` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `Set` bzw. `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Sets und Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. - -__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. +Lassen Sie erneut die Tests laufen. Es müssen alle Testfälle grün sein, bevor Sie die Lösung einchecken. ## Abgabe (optional) diff --git a/Assignment_093/solution/readme.md b/Assignment_093/solution/readme.md index a7c6da7..f543e35 100644 --- a/Assignment_093/solution/readme.md +++ b/Assignment_093/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: `Set` und dessen Implementierungen +# Lösung: `Comparator` verwenden und Objekte sortieren Musterlösung: -[pr2.collections.set](../../solutions/src/main/java/pr2/collections/set/) +[pr2.collections.sortieren](../../solutions/src/main/java/pr2/collections/sortieren/) diff --git a/Assignment_094/readme.md b/Assignment_094/readme.md index b094686..5cc4e93 100644 --- a/Assignment_094/readme.md +++ b/Assignment_094/readme.md @@ -1,26 +1,30 @@ -# CommandLineSorter +# Wörterbuchprogramm [Musterlösung](solution/) ## Lernziel -Sortieren von Collections. +Interface `Map` und seine Implementierungen einsetzen. ## Aufgabe -Gehen Sie in das Paket [pr2.collections.sorter_1](../sources/src/main/java/pr2/collections/sorter_1/). +Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr2/collections/woerterbuch/). -Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. +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. ```console -> java CommandLineSorter Albert Dieter Sigmund Thomas Frank Dieter Herbert -Albert -Dieter -Dieter -Frank -Herbert -Sigmund -Thomas +> java Woerterbuch +Bitte mindestens ein Wort angeben! +``` + +```console +>java Woerterbuch gehen schlafen tanzen hopsen +gehen => go +schlafen => sleep +tanzen => dance +hopsen => ``` diff --git a/Assignment_094/solution/readme.md b/Assignment_094/solution/readme.md index 6c8a0cf..8fa5708 100644 --- a/Assignment_094/solution/readme.md +++ b/Assignment_094/solution/readme.md @@ -1,5 +1,5 @@ -# Lösung: CommandLineSorter +# Lösung: Wörterbuchprogramm Musterlösung: -[pr2.collections.sorter_1](../../solutions/src/main/java/pr2/collections/sorter_1/) +[pr2.collections.woerterbuch](../../solutions/src/main/java/pr2/collections/woerterbuch/) diff --git a/Assignment_095/readme.md b/Assignment_095/readme.md deleted file mode 100644 index 45b249d..0000000 --- a/Assignment_095/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -# CommandLineSorter -- Version 2 - - [Musterlösung](solution/) - -## Lernziel - -Sortieren von Collections. - -## Aufgabe - -Gehen Sie in das Paket [pr2.collections.sorter_2](../sources/src/main/java/pr2/collections/sorter_2/). - -Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. Hierbei sollen alle Dubletten entfernt werden, d.h. es soll kein Wort doppelt in der Liste auftauchen. - -```console -> java CommandLineSorter Albert Dieter Sigmund Dieter Thomas Frank Herbert -Albert -Dieter -Frank -Herbert -Sigmund -Thomas -``` - - -## Abgabe (optional) - -__Sie müssen keine Lösung für diese Aufgabe einreichen.__ - -Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor: - - 1. Öffnen Sie eine Kommandozeile (Terminal). - 2. Gehen Sie in Ihr Working Directory. - 3. Wechseln Sie mit `cd` in das Verzeichnis `sources`. - 4. Bauen Sie das Projekt mit dem Kommando `mvn`. \ No newline at end of file diff --git a/Assignment_095/solution/readme.md b/Assignment_095/solution/readme.md deleted file mode 100644 index be55751..0000000 --- a/Assignment_095/solution/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Lösung: CommandLineSorter -- Version 2 - -Musterlösung: - -[pr2.collections.sorter_2](../../solutions/src/main/java/pr2/collections/sorter_2/) diff --git a/Assignment_096/readme.md b/Assignment_096/readme.md deleted file mode 100644 index 9db1174..0000000 --- a/Assignment_096/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# `Comparator` verwenden und Objekte sortieren - - [Musterlösung](solution/) - -## Lernziel - -Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator` realisieren. - -## Aufgabe - -Gehen Sie in das Paket [pr2.collections.sortieren](../sources/src/main/java/pr2/collections/sortieren/). - -Sie finden in der Aufgabe bereits die Klasse `Sorter` und den JUnit-Test `SorterTest` vor. Schauen Sie sich die Klasse `Sorter` an und versuchen Sie anhand der JavaDoc und des bereits vorhandenen Codes zu verstehen, was die Klasse machen soll. - -Lassen Sie den Test laufen. Sie werden feststellen, dass ein Testfall grün ist, obwohl in `Sorter` gar keine Implementierung vorhanden ist. Versuchen Sie herauszufinden, warum dies so ist. - -Fügen Sie nun den fehlenden Code in die Klasse `Sorter` ein, und geben Sie entsprechende `Comparator`-Objekte zurück, sodass die Daten entsprechend dem Parameter `order` sortiert werden können. - -Lassen Sie erneut die Tests laufen. Es müssen alle Testfälle grün sein, bevor Sie die Lösung einchecken. - - -## Abgabe (optional) - -__Sie müssen keine Lösung für diese Aufgabe einreichen.__ - -Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor: - - 1. Öffnen Sie eine Kommandozeile (Terminal). - 2. Gehen Sie in Ihr Working Directory. - 3. Wechseln Sie mit `cd` in das Verzeichnis `sources`. - 4. Bauen Sie das Projekt mit dem Kommando `mvn`. \ No newline at end of file diff --git a/Assignment_096/solution/readme.md b/Assignment_096/solution/readme.md deleted file mode 100644 index f543e35..0000000 --- a/Assignment_096/solution/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Lösung: `Comparator` verwenden und Objekte sortieren - -Musterlösung: - -[pr2.collections.sortieren](../../solutions/src/main/java/pr2/collections/sortieren/) diff --git a/Assignment_097/readme.md b/Assignment_097/readme.md deleted file mode 100644 index 5cc4e93..0000000 --- a/Assignment_097/readme.md +++ /dev/null @@ -1,40 +0,0 @@ -# Wörterbuchprogramm - - [Musterlösung](solution/) - -## Lernziel - -Interface `Map` und seine Implementierungen einsetzen. - -## Aufgabe - -Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr2/collections/woerterbuch/). - -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. - -```console -> java Woerterbuch -Bitte mindestens ein Wort angeben! -``` - -```console ->java Woerterbuch gehen schlafen tanzen hopsen -gehen => go -schlafen => sleep -tanzen => dance -hopsen => -``` - - -## Abgabe (optional) - -__Sie müssen keine Lösung für diese Aufgabe einreichen.__ - -Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor: - - 1. Öffnen Sie eine Kommandozeile (Terminal). - 2. Gehen Sie in Ihr Working Directory. - 3. Wechseln Sie mit `cd` in das Verzeichnis `sources`. - 4. Bauen Sie das Projekt mit dem Kommando `mvn`. \ No newline at end of file diff --git a/Assignment_097/solution/readme.md b/Assignment_097/solution/readme.md deleted file mode 100644 index 8fa5708..0000000 --- a/Assignment_097/solution/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Lösung: Wörterbuchprogramm - -Musterlösung: - -[pr2.collections.woerterbuch](../../solutions/src/main/java/pr2/collections/woerterbuch/) diff --git a/readme.md b/readme.md index 190a395..016e0fd 100644 --- a/readme.md +++ b/readme.md @@ -81,27 +81,24 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstat | 71. | n/a | [`super` und `extends` einsetzen](Assignment_071/readme.md) | [✅](Assignment_071/solution/) | | 72. | n/a | [Generischen Typ verwenden](Assignment_072/readme.md) | [✅](Assignment_072/solution/) | | 73. | n/a | [Generische Typen zusammen mit Wildcards einsetzen](Assignment_073/readme.md) | [✅](Assignment_073/solution/) | -| 74. | n/a | [Anonyme Klasse schreiben](Assignment_074/readme.md) | [✅](Assignment_074/solution/) | -| 75. | n/a | [Eigene compare-Methode schreiben](Assignment_075/readme.md) | [✅](Assignment_075/solution/) | -| 76. | n/a | [Innere Klasse Beobachter](Assignment_076/readme.md) | [✅](Assignment_076/solution/) | -| 77. | n/a | [Callback mit anonymer Klasse realisieren](Assignment_077/readme.md) | [✅](Assignment_077/solution/) | -| 78. | n/a | [Comparator als Lambda](Assignment_078/readme.md) | [✅](Assignment_078/solution/) | -| 79. | n/a | [Callback mit Lambda realisieren](Assignment_079/readme.md) | [✅](Assignment_079/solution/) | -| 80. | n/a | [Lokale Klasse schreiben](Assignment_080/readme.md) | [✅](Assignment_080/solution/) | -| 81. | n/a | [MatrixSuche](Assignment_081/readme.md) | [✅](Assignment_081/solution/) | -| 82. | n/a | [StringTransmogrifier](Assignment_082/readme.md) | [✅](Assignment_082/solution/) | -| 83. | n/a | [StringTransmogrifier erweitern](Assignment_083/readme.md) | [✅](Assignment_083/solution/) | -| 84. | n/a | [Nonstatic Member Class](Assignment_084/readme.md) | [✅](Assignment_084/solution/) | -| 85. | n/a | [Static Member Class](Assignment_085/readme.md) | [✅](Assignment_085/solution/) | -| 86. | n/a | [Iterator schreiben](Assignment_086/readme.md) | [✅](Assignment_086/solution/) | -| 87. | n/a | [Mithilfe eines Iterators über Daten iterieren](Assignment_087/readme.md) | [✅](Assignment_087/solution/) | -| 88. | n/a | [Iterator programmieren](Assignment_088/readme.md) | [✅](Assignment_088/solution/) | -| 89. | n/a | [`List` und dessen Implementierungen](Assignment_089/readme.md) | [✅](Assignment_089/solution/) | -| 90. | n/a | [`Map` verwenden](Assignment_090/readme.md) | [✅](Assignment_090/solution/) | -| 91. | n/a | [ReverserGeneric](Assignment_091/readme.md) | [✅](Assignment_091/solution/) | -| 92. | n/a | [Strings umgekehrt sortieren: Reverser](Assignment_092/readme.md) | [✅](Assignment_092/solution/) | -| 93. | n/a | [`Set` und dessen Implementierungen](Assignment_093/readme.md) | [✅](Assignment_093/solution/) | -| 94. | n/a | [CommandLineSorter](Assignment_094/readme.md) | [✅](Assignment_094/solution/) | -| 95. | n/a | [CommandLineSorter -- Version 2](Assignment_095/readme.md) | [✅](Assignment_095/solution/) | -| 96. | n/a | [`Comparator` verwenden und Objekte sortieren](Assignment_096/readme.md) | [✅](Assignment_096/solution/) | -| 97. | n/a | [Wörterbuchprogramm](Assignment_097/readme.md) | [✅](Assignment_097/solution/) | +| 74. | n/a | [Eigene compare-Methode schreiben](Assignment_074/readme.md) | [✅](Assignment_074/solution/) | +| 75. | n/a | [Innere Klasse Beobachter](Assignment_075/readme.md) | [✅](Assignment_075/solution/) | +| 76. | n/a | [Callback mit anonymer Klasse realisieren](Assignment_076/readme.md) | [✅](Assignment_076/solution/) | +| 77. | n/a | [Comparator als Lambda](Assignment_077/readme.md) | [✅](Assignment_077/solution/) | +| 78. | n/a | [Callback mit Lambda realisieren](Assignment_078/readme.md) | [✅](Assignment_078/solution/) | +| 79. | n/a | [MatrixSuche](Assignment_079/readme.md) | [✅](Assignment_079/solution/) | +| 80. | n/a | [StringTransmogrifier](Assignment_080/readme.md) | [✅](Assignment_080/solution/) | +| 81. | n/a | [StringTransmogrifier erweitern](Assignment_081/readme.md) | [✅](Assignment_081/solution/) | +| 82. | n/a | [Static Member Class](Assignment_082/readme.md) | [✅](Assignment_082/solution/) | +| 83. | n/a | [Iterator schreiben](Assignment_083/readme.md) | [✅](Assignment_083/solution/) | +| 84. | n/a | [Mithilfe eines Iterators über Daten iterieren](Assignment_084/readme.md) | [✅](Assignment_084/solution/) | +| 85. | n/a | [Iterator programmieren](Assignment_085/readme.md) | [✅](Assignment_085/solution/) | +| 86. | n/a | [`List` und dessen Implementierungen](Assignment_086/readme.md) | [✅](Assignment_086/solution/) | +| 87. | n/a | [`Map` verwenden](Assignment_087/readme.md) | [✅](Assignment_087/solution/) | +| 88. | n/a | [ReverserGeneric](Assignment_088/readme.md) | [✅](Assignment_088/solution/) | +| 89. | n/a | [Strings umgekehrt sortieren: Reverser](Assignment_089/readme.md) | [✅](Assignment_089/solution/) | +| 90. | n/a | [`Set` und dessen Implementierungen](Assignment_090/readme.md) | [✅](Assignment_090/solution/) | +| 91. | n/a | [CommandLineSorter](Assignment_091/readme.md) | [✅](Assignment_091/solution/) | +| 92. | n/a | [CommandLineSorter -- Version 2](Assignment_092/readme.md) | [✅](Assignment_092/solution/) | +| 93. | n/a | [`Comparator` verwenden und Objekte sortieren](Assignment_093/readme.md) | [✅](Assignment_093/solution/) | +| 94. | n/a | [Wörterbuchprogramm](Assignment_094/readme.md) | [✅](Assignment_094/solution/) | diff --git a/solutions/src/main/java/pr2/lambda/anonymous/Alien.java b/solutions/src/main/java/pr2/lambda/anonymous/Alien.java deleted file mode 100644 index 15ab6ce..0000000 --- a/solutions/src/main/java/pr2/lambda/anonymous/Alien.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/anonymous/", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/anonymous/explosion_1" + ".png", - 43))); - setInvisibleAfterFrames(70); - } -} diff --git a/solutions/src/main/java/pr2/lambda/anonymous/GameBoard.java b/solutions/src/main/java/pr2/lambda/anonymous/GameBoard.java deleted file mode 100644 index b436c76..0000000 --- a/solutions/src/main/java/pr2/lambda/anonymous/GameBoard.java +++ /dev/null @@ -1,73 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.Board; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - Alien alien; // nicht private wegen des Zugriffs aus der inneren Klasse - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(this, - new Point(800, 50 + new Random().nextInt(100))); - - // Event-Handler für Clicks. - addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - if (alien.intersects(e.getPoint())) { - alien.explode(); - } - else { - alien.setPosition(e.getPoint()); - } - } - }); - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } -} diff --git a/solutions/src/main/java/pr2/lambda/anonymous/GameMain.java b/solutions/src/main/java/pr2/lambda/anonymous/GameMain.java deleted file mode 100644 index 33056e6..0000000 --- a/solutions/src/main/java/pr2/lambda/anonymous/GameMain.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (04) Anonymous Class", new GameBoard()); - - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -} diff --git a/solutions/src/main/java/pr2/lambda/local/Alien.java b/solutions/src/main/java/pr2/lambda/local/Alien.java deleted file mode 100644 index 0a83b03..0000000 --- a/solutions/src/main/java/pr2/lambda/local/Alien.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/local/", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/local/explosion_1" + ".png", - 43))); - setInvisibleAfterFrames(70); - } -} diff --git a/solutions/src/main/java/pr2/lambda/local/GameBoard.java b/solutions/src/main/java/pr2/lambda/local/GameBoard.java deleted file mode 100644 index 52cb76d..0000000 --- a/solutions/src/main/java/pr2/lambda/local/GameBoard.java +++ /dev/null @@ -1,72 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.Board; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - Alien alien; // nicht private wegen Zugriff aus innerer Klasse - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(this, - new Point(800, 50 + new Random().nextInt(100))); - - /* Event-Handler für Clicks. */ - class AlienExploder extends MouseAdapter { - @Override - public void mousePressed(MouseEvent e) { - if (alien.intersects(e.getPoint())) { - alien.explode(); - } - } - } - - addMouseListener(new AlienExploder()); - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } -} diff --git a/solutions/src/main/java/pr2/lambda/local/GameMain.java b/solutions/src/main/java/pr2/lambda/local/GameMain.java deleted file mode 100644 index ec4aab1..0000000 --- a/solutions/src/main/java/pr2/lambda/local/GameMain.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (03) Local Class", new GameBoard()); - - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -} diff --git a/solutions/src/main/java/pr2/lambda/nonstatic/Alien.java b/solutions/src/main/java/pr2/lambda/nonstatic/Alien.java deleted file mode 100644 index ca7ba90..0000000 --- a/solutions/src/main/java/pr2/lambda/nonstatic/Alien.java +++ /dev/null @@ -1,54 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/static_member", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/static_member/explosion_1.png", - 43))); - setInvisibleAfterFrames(70); - } - - /** - * Klick auf das Alien lässt es explodieren. - */ - @Override - public void mousePressed() { - explode(); - } -} diff --git a/solutions/src/main/java/pr2/lambda/nonstatic/GameBoard.java b/solutions/src/main/java/pr2/lambda/nonstatic/GameBoard.java deleted file mode 100644 index a8ce053..0000000 --- a/solutions/src/main/java/pr2/lambda/nonstatic/GameBoard.java +++ /dev/null @@ -1,108 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - private final Alien alien; - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(new Point(800, 50 + new Random().nextInt(100))); - - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } - - - /** - * Ein Alien. - */ - public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Alien X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param startPoint Start-Position - */ - public Alien(Point startPoint) { - super(GameBoard.this, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("assets", "ship01", "ship02", - "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - - GameBoard.this.addMouseListener(this); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("assets" + "/explosion_1.png", 43))); - setInvisibleAfterFrames(70); - } - - /** - * Klick auf das Alien lässt es explodieren. - */ - @Override - public void mousePressed() { - explode(); - } - } -} diff --git a/solutions/src/main/java/pr2/lambda/nonstatic/GameMain.java b/solutions/src/main/java/pr2/lambda/nonstatic/GameMain.java deleted file mode 100644 index d4a3d5a..0000000 --- a/solutions/src/main/java/pr2/lambda/nonstatic/GameMain.java +++ /dev/null @@ -1,27 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (02) Nonstatic Member", new GameBoard()); - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -} diff --git a/sources/src/main/java/pr2/lambda/anonymous/Alien.java b/sources/src/main/java/pr2/lambda/anonymous/Alien.java deleted file mode 100644 index 15ab6ce..0000000 --- a/sources/src/main/java/pr2/lambda/anonymous/Alien.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/anonymous/", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/anonymous/explosion_1" + ".png", - 43))); - setInvisibleAfterFrames(70); - } -} diff --git a/sources/src/main/java/pr2/lambda/anonymous/GameBoard.java b/sources/src/main/java/pr2/lambda/anonymous/GameBoard.java deleted file mode 100644 index a999179..0000000 --- a/sources/src/main/java/pr2/lambda/anonymous/GameBoard.java +++ /dev/null @@ -1,62 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.Board; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - Alien alien; // nicht private wegen des Zugriffs aus der inneren Klasse - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(this, - new Point(800, 50 + new Random().nextInt(100))); - - // TODO: Event-Handler hier erstellen - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } -} diff --git a/sources/src/main/java/pr2/lambda/anonymous/GameMain.java b/sources/src/main/java/pr2/lambda/anonymous/GameMain.java deleted file mode 100644 index 33056e6..0000000 --- a/sources/src/main/java/pr2/lambda/anonymous/GameMain.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.lambda.anonymous; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (04) Anonymous Class", new GameBoard()); - - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -} diff --git a/sources/src/main/java/pr2/lambda/local/Alien.java b/sources/src/main/java/pr2/lambda/local/Alien.java deleted file mode 100644 index 0a83b03..0000000 --- a/sources/src/main/java/pr2/lambda/local/Alien.java +++ /dev/null @@ -1,46 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/local/", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/local/explosion_1" + ".png", - 43))); - setInvisibleAfterFrames(70); - } -} diff --git a/sources/src/main/java/pr2/lambda/local/GameBoard.java b/sources/src/main/java/pr2/lambda/local/GameBoard.java deleted file mode 100644 index 9f721d9..0000000 --- a/sources/src/main/java/pr2/lambda/local/GameBoard.java +++ /dev/null @@ -1,62 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.Board; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - Alien alien; // nicht private wegen Zugriff aus innerer Klasse - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(this, - new Point(800, 50 + new Random().nextInt(100))); - - // TODO: AlienExploder hier einfügen - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } -} diff --git a/sources/src/main/java/pr2/lambda/local/GameMain.java b/sources/src/main/java/pr2/lambda/local/GameMain.java deleted file mode 100644 index ec4aab1..0000000 --- a/sources/src/main/java/pr2/lambda/local/GameMain.java +++ /dev/null @@ -1,28 +0,0 @@ -package pr2.lambda.local; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (03) Local Class", new GameBoard()); - - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -} diff --git a/sources/src/main/java/pr2/lambda/nonstatic/Alien.java b/sources/src/main/java/pr2/lambda/nonstatic/Alien.java deleted file mode 100644 index ca7ba90..0000000 --- a/sources/src/main/java/pr2/lambda/nonstatic/Alien.java +++ /dev/null @@ -1,54 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Point; - -/** - * Ein Alien. - */ -public class Alien extends AnimatedSprite { - - /** - * Geschwindigkeit des Aliens X-Richtung. - */ - private static final int ALIEN_SPEED = 2; - - /** - * Neues Alien anlegen. - * - * @param board das Spielfeld - * @param startPoint Start-Position - */ - public Alien(Board board, Point startPoint) { - super(board, startPoint, BoundaryPolicy.JUMP_BACK, - new AnimatedImage(50, - new ImagePack("pr2/lambda/static_member", - "ship01", "ship02", "ship03"))); - velocity.setVelocity(Direction.WEST, ALIEN_SPEED); - } - - /** - * Alien explodieren lassen. - */ - public void explode() { - setActive(false); - setImages(new AnimatedImage(20, - new StripedImage("pr2/lambda/static_member/explosion_1.png", - 43))); - setInvisibleAfterFrames(70); - } - - /** - * Klick auf das Alien lässt es explodieren. - */ - @Override - public void mousePressed() { - explode(); - } -} diff --git a/sources/src/main/java/pr2/lambda/nonstatic/GameBoard.java b/sources/src/main/java/pr2/lambda/nonstatic/GameBoard.java deleted file mode 100644 index 6d1a95b..0000000 --- a/sources/src/main/java/pr2/lambda/nonstatic/GameBoard.java +++ /dev/null @@ -1,67 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.Board; -import de.smits_net.games.framework.image.AnimatedImage; -import de.smits_net.games.framework.image.ImagePack; -import de.smits_net.games.framework.image.StripedImage; -import de.smits_net.games.framework.sprite.AnimatedSprite; -import de.smits_net.games.framework.sprite.Direction; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.util.Random; - -/** - * Spielfeld. - */ -public class GameBoard extends Board { - - /** - * Alien, das durch das Bild läuft. - */ - private final Alien alien; - - /** - * Erzeugt ein neues Board. - */ - public GameBoard() { - // neues Spielfeld anlegen - super(10, new Dimension(800, 300), Color.BLACK); - - // Alien initialisieren - alien = new Alien(this, new Point(800, 50 + new Random().nextInt(100))); - - // Alien soll auf Maus-Klicks reagieren - addMouseListener(alien); - } - - /** - * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGame(Graphics g) { - // Alien zeichnen - alien.draw(g, this); - } - - /** - * Game-Over-Text anzeigen. Wird vom Framework aufgerufen. - */ - @Override - public void drawGameOver(Graphics g) { - centerText(g, "Das Spiel ist aus!"); - } - - /** - * Spielsituation updaten. Wird vom Framework aufgerufen. - */ - @Override - public boolean updateGame() { - alien.move(); - return alien.isVisible(); - } - - // TODO: Alien zu einer non-static class machen -} diff --git a/sources/src/main/java/pr2/lambda/nonstatic/GameMain.java b/sources/src/main/java/pr2/lambda/nonstatic/GameMain.java deleted file mode 100644 index d4a3d5a..0000000 --- a/sources/src/main/java/pr2/lambda/nonstatic/GameMain.java +++ /dev/null @@ -1,27 +0,0 @@ -package pr2.lambda.nonstatic; - -import de.smits_net.games.framework.board.MainWindow; - -import java.awt.EventQueue; - -/** - * Hauptklasse des Spiels. - */ -public class GameMain extends MainWindow { - - /** - * Neues Spiel anlegen. - */ - public GameMain() { - super("Click Alien - (02) Nonstatic Member", new GameBoard()); - } - - /** - * Startpunkt. - * - * @param args command line arguments. - */ - public static void main(String[] args) { - EventQueue.invokeLater(GameMain::new); - } -}