From 94b99d163b48f60186d77a06090ad53f53da4c63 Mon Sep 17 00:00:00 2001 From: Thomas Smits Date: Thu, 20 Apr 2023 18:42:47 +0200 Subject: [PATCH] Update of exercises --- Assignment_031/readme.md | 25 +++++ Assignment_032/readme.md | 25 +++++ Assignment_033/readme.md | 31 ++++++ Assignment_034/readme.md | 25 +++++ Assignment_035/readme.md | 37 +++++++ Assignment_036/readme.md | 27 ++++++ Assignment_037/readme.md | 38 ++++++++ Assignment_038/readme.md | 35 +++++++ Assignment_039/readme.md | 15 +++ Assignment_040/readme.md | 15 +++ Assignment_041/readme.md | 23 +++++ Assignment_042/img/schnick.png | Bin 0 -> 21428 bytes Assignment_042/readme.md | 51 ++++++++++ readme.md | 76 +++++++++------ .../main/java/pr2/enums/eigene/Wuerfel.java | 52 ++++++++++ .../pr2/enums/eigene/test/WuerfelTest.java | 59 ++++++++++++ .../java/pr2/enums/filme/LieblingsFilme.java | 5 + .../src/main/java/pr2/enums/filme/Main.java | 7 ++ .../src/main/java/pr2/enums/schnick/Move.java | 4 + .../enums/schnick/SchnickSchnackSchnuck.java | 11 +++ .../main/java/pr2/enums/singleton/MyEnum.java | 7 ++ .../pr2/enums/singleton/SingletonBeweis.java | 8 ++ .../java/pr2/enums/verwenden/GameBoard.java | 47 +++++++++ .../java/pr2/enums/verwenden/GameMain.java | 28 ++++++ .../java/pr2/enums/verwenden/Professor.java | 32 ++++++ .../java/pr2/object/clone_alien/Alien.java | 91 ++++++++++++++++++ .../pr2/object/clone_alien/Raumanzug.java | 68 +++++++++++++ .../clone_alien/test/AlienCloneTest.java | 38 ++++++++ .../java/pr2/object/clone_person/Person.java | 22 +++++ .../java/pr2/object/equals_hashcode/Ork.java | 29 ++++++ .../pr2/object/equals_hashcode/Wesen.java | 29 ++++++ .../equals_hashcode/test/WesenTest.java | 87 +++++++++++++++++ .../java/pr2/object/equals_person/Person.java | 10 ++ .../main/java/pr2/object/tostring/Alien.java | 47 +++++++++ .../java/pr2/object/tostring/Ausgabe.java | 24 +++++ .../java/pr2/object/tostring/Raumanzug.java | 44 +++++++++ .../object/wrapper_boxsearch/BoxSearcher.java | 8 ++ .../object/wrapper_umwandler/Umwandler.java | 45 +++++++++ 38 files changed, 1193 insertions(+), 32 deletions(-) create mode 100644 Assignment_031/readme.md create mode 100644 Assignment_032/readme.md create mode 100644 Assignment_033/readme.md create mode 100644 Assignment_034/readme.md create mode 100644 Assignment_035/readme.md create mode 100644 Assignment_036/readme.md create mode 100644 Assignment_037/readme.md create mode 100644 Assignment_038/readme.md create mode 100644 Assignment_039/readme.md create mode 100644 Assignment_040/readme.md create mode 100644 Assignment_041/readme.md create mode 100644 Assignment_042/img/schnick.png create mode 100644 Assignment_042/readme.md create mode 100644 sources/src/main/java/pr2/enums/eigene/Wuerfel.java create mode 100644 sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java create mode 100644 sources/src/main/java/pr2/enums/filme/LieblingsFilme.java create mode 100644 sources/src/main/java/pr2/enums/filme/Main.java create mode 100644 sources/src/main/java/pr2/enums/schnick/Move.java create mode 100644 sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java create mode 100644 sources/src/main/java/pr2/enums/singleton/MyEnum.java create mode 100644 sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java create mode 100644 sources/src/main/java/pr2/enums/verwenden/GameBoard.java create mode 100644 sources/src/main/java/pr2/enums/verwenden/GameMain.java create mode 100644 sources/src/main/java/pr2/enums/verwenden/Professor.java create mode 100644 sources/src/main/java/pr2/object/clone_alien/Alien.java create mode 100644 sources/src/main/java/pr2/object/clone_alien/Raumanzug.java create mode 100644 sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java create mode 100644 sources/src/main/java/pr2/object/clone_person/Person.java create mode 100644 sources/src/main/java/pr2/object/equals_hashcode/Ork.java create mode 100644 sources/src/main/java/pr2/object/equals_hashcode/Wesen.java create mode 100644 sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java create mode 100644 sources/src/main/java/pr2/object/equals_person/Person.java create mode 100644 sources/src/main/java/pr2/object/tostring/Alien.java create mode 100644 sources/src/main/java/pr2/object/tostring/Ausgabe.java create mode 100644 sources/src/main/java/pr2/object/tostring/Raumanzug.java create mode 100644 sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java create mode 100644 sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java diff --git a/Assignment_031/readme.md b/Assignment_031/readme.md new file mode 100644 index 0000000..9ff8980 --- /dev/null +++ b/Assignment_031/readme.md @@ -0,0 +1,25 @@ +# Deep-Copy mit `clone()` + + + +## Lernziel + +Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. + +## Aufgabe + +Im Paket [pr2.object.clone_alien](../sources/src/main/java/pr2/object/clone_alien/) fügen Sie der Klasse `Alien` eine `clone()`-Methode hinzu, die eine _tiefe Kopie_ der Objekte anlegt. Hierzu müssen Sie auch Raumanzug mit einer `clone()`-Methode ausstatten. + +Testen Sie, ob Ihre Implementierung korrekt funktioniert, indem Sie die vorhandenen Testfälle ausführen. Damit die Tests laufen können, müssen Sie die Kommentarzeichen entfernen. + + +## 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_032/readme.md b/Assignment_032/readme.md new file mode 100644 index 0000000..09f72f2 --- /dev/null +++ b/Assignment_032/readme.md @@ -0,0 +1,25 @@ +# Clone + + + +## Lernziel + +Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. + +## Aufgabe + +Im Paket [pr2.object.clone_person](../sources/src/main/java/pr2/object/clone_person) finden Sie die Klasse `Person`. + +Erweitern Sie die Klasse bitte um eine `clone()`-Methode, die eine tiefe Kopie (**deep copy**) durchführt. + + +## 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_033/readme.md b/Assignment_033/readme.md new file mode 100644 index 0000000..36462b4 --- /dev/null +++ b/Assignment_033/readme.md @@ -0,0 +1,31 @@ +# `equals()` und `hashCode()` implementieren und nutzen + + + +## Lernziel + +Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. + +## Aufgabe + +Im Projekt finden Sie ein Paket [pr2.object.equals_hashcode](../sources/src/main/java/pr2/object/equals_hashcode/) mit zwei Klassen `Wesen` und `Ork` und einen Testfall `WesenTest`. + +Wenn Sie den Test ausführen wird er nicht erfolgreich sein, da die Methoden `equals` und `hashCode` in der Klasse Ork fehlen. + +Schauen Sie sich die `equals`- und `hashCode`-Methoden in `Wesen` an und versuchen Sie die Methoden zu verstehen. + +Schreiben Sie im nächsten Schritt korrekte `equals`- und `hashCode`-Methoden für `Ork`. __Achtung:__ Sie sollten für Ihre Lösung die Klasse `Wesen` nicht verändern. + +Führen Sie den Test erneut aus, um sicherzustellen, dass die Methoden richtig funktionieren. + + +## 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_034/readme.md b/Assignment_034/readme.md new file mode 100644 index 0000000..401e331 --- /dev/null +++ b/Assignment_034/readme.md @@ -0,0 +1,25 @@ +# equals und hashCode + + + +## Lernziel + +Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. + +## Aufgabe + +Im Paket [pr2.object.equals_person](../sources/src/main/java/pr2/object/equals_person) finden Sie die Klasse `Person`. + +Geben Sie bitte den Java-Quelltext einer `equals`- und `hashCode`-Methode für diese Klasse an, die die in der Klasse `java.lang.Object` zugesicherte Äquivalenzbeziehung einhalten. + + +## 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_035/readme.md b/Assignment_035/readme.md new file mode 100644 index 0000000..75b878f --- /dev/null +++ b/Assignment_035/readme.md @@ -0,0 +1,37 @@ +# `toString()`-Methode implementieren + + + +## Lernziel + +Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.tostring](../sources/src/main/java/pr2/object/tostring/). + +Lassen Sie die Klasse `Ausgabe` laufen und sehen Sie sich die Ausgabe an. Versuchen Sie zu verstehen, wie es zu dieser Ausgabe kommt und was sie bedeutet. + +Schreiben Sie im nächsten Schritt für die Klassen `Alien` und `Raumanzug` passende `toString()`-Methoden, sodass beim Aufruf der Klasse `Ausgabe` eine sinnvolle Ausgabe entsteht. Geben Sie + + * den Namen des Aliens, + * die Marke des Raumanzuges und + * den vorhandenen Sauerstoffvorrat + +aus. + +Eine beispielhafte Ausgabe könnte wie folgt aussehen: + +`Ich bin ein Alien und heiße 'E.T.'. Ich trage einen Raumanzug von Spaceman 2000 (Füllstand 19%).` + + +## 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_036/readme.md b/Assignment_036/readme.md new file mode 100644 index 0000000..d532b34 --- /dev/null +++ b/Assignment_036/readme.md @@ -0,0 +1,27 @@ +# Optimierung bei Integer + + + +## Lernziel + +Wrapper-Klassen und deren Optimierungen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.wrapper_boxsearch](../sources/src/main/java/pr2/object/wrapper_boxsearch/). + +Bei den Wrapper-Typen (z.B. `Integer`) wird eine interne Optimierung durchgeführt, die dazu führt, dass bei Werten unterhalb einer bestimmten Schranke, beim Autoboxing immer wieder dasselbe Objekt verwendet wird, anstatt ein neues Wrapper-Objekt zu erzeugten. + +Schreiben Sie bitte ein Programm in der Klasse `BoxSearcher`, das für `Integer` diese Schranke sucht, indem es die Werte von `0` bis `200` auf diese Eigenschaft hin untersucht und für jeden Integer-Wert ausgibt, ob der Mechanismus bei ihm greift oder nicht. + + +## 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_037/readme.md b/Assignment_037/readme.md new file mode 100644 index 0000000..e194821 --- /dev/null +++ b/Assignment_037/readme.md @@ -0,0 +1,38 @@ +# Methoden der Wrapper-Klassen + + + +## Lernziel + +Wrapper-Klassen nutzen, um Zahlen umzuwandeln. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.wrapper_umwandler](../sources/src/main/java/pr2/object/wrapper_umwandler/). + +Vervollständigen Sie die Klasse `Umwandler` so, dass die Methode `toString` eine Zahl nimmt und in vier verschiedenen Formaten ausgibt. Schauen Sie sich die Klasse `Integer` an und überlegen Sie, welche der vorhandenen statischen Methoden für das Problem passend sein könnten. + +Eine beispielhafte könnte wie folgt aussehen: + +```console +Dezimal: 17871 +Hex : 45cf +Oktal : 42717 +Binär : 100010111001111 +``` + +Im nächsten Schritt stellen Sie bitte die Methode `fromString` fertig. Auch hierzu sollten Sie sich die Klasse `Integer` genauer anschauen. + +Führen Sie das Programm aus und schauen Sie, ob das Ergebnis sinnvoll ist. + + +## 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_038/readme.md b/Assignment_038/readme.md new file mode 100644 index 0000000..dc5f618 --- /dev/null +++ b/Assignment_038/readme.md @@ -0,0 +1,35 @@ +# Eigene Enumeration schreiben und verwenden + + + +## Lernziel + +Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.eigene](../sources/src/main/java/pr2/enums/eigene_enumeration/). + +In Rollenspielen verwendet man oft Würfel mit einer unterschiedlichen Anzahl von Seiten. Üblich sind 4-, 6-, 8-, 10-, und 12-seitige Würfel. Das vorliegende Programm erlaubt es unterschiedliche Würfel zu simulieren. + +Betrachten Sie das vorliegende Projekt. Darin gibt es eine Klasse `Wuerfel`, die einen Würfel in einem Rollenspiel simulieren kann und einen dazugehörigen Test in `WuerfelTest`. Welche Art von Würfel man haben möchte, setzt man über den Konstruktorparameter von `Wuerfel` und die entsprechenden Konstanten (z.B. `D6`). Lassen Sie die Unit-Test laufen. Wahrscheinlich wird einer fehlschlagen. Korrigieren Sie den Fehler, damit alle Tests grün sind. + +Das Problem mit der vorliegenden Klasse ist, dass man auch Würfel mit einer anderen Augenzahl (insbesondere ungerade) erzeugen kann. Um dies zu verhindern, sollen Sie das Programm auf die Verwendung von Enumerationen umstellen. + +Schreiben Sie eine Enumeration `WuerfelTyp`, die über die Konstanten `D4`, `D6`,`D8`, `D10` und `D12` die möglichen Würfelarten vorgibt. Ändern Sie den Konstruktorparameter von `Wuerfel` so, dass er anstatt eines `int` einen `WuerfelTyp` nimmt. Damit das Programm erweiterbar bleibt, speichern Sie die Anzahl der Seiten, die zu den jeweiligen Typen gehören in der Enumeration und nicht in der Klasse `Wuerfel`. Geben Sie der Enumeration außerdem eine Methode mit, welche den erwarteten Durchschnittswert für eine große Anzahl von Würfen zurückgibt (Methodenname `average`). + +Ändern Sie die Tests so, dass sie mit der Enumeration arbeiten. Codieren Sie die Enum-Werte (`D4`...`D12`) nicht hart im Test, sondern verwenden Sie die Methode `values()`, um die Tests möglichst generisch zu gestalten. + +Fügen Sie nun einen weiteren Würfeltyp `D20` ein und testen Sie diesen. Wenn Sie alles richtig gemacht haben, müssen Sie hierfür nur die Enumeration `WuerfelTyp` ändern, alle anderen Klassen bleiben unverändert. + + +## 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_039/readme.md b/Assignment_039/readme.md new file mode 100644 index 0000000..d4eea00 --- /dev/null +++ b/Assignment_039/readme.md @@ -0,0 +1,15 @@ +# Enumeration schreiben + + + +## Lernziel + +Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.filme](../sources/src/main/java/pr2/enums/filme/). + +Schreiben Sie eine Enumeration `LieblingsFilme`, die Ihre Lieblingsfilme enthalten soll. Speichern Sie zu jedem Film bitte den Titel, den Regisseur und eine Bewertung auf einer Skala von 0 bis 10. Bieten Sie weiterhin eine `toString`-Methode an, die diese Informationen wieder ausgibt und denken Sie an Methoden, um später wieder auf die Daten zu den Filmen zugreifen zu können. + +Schreiben Sie eine Klasse `Main`, welche alle Lieblingsfilme auf der Konsole ausgibt. \ No newline at end of file diff --git a/Assignment_040/readme.md b/Assignment_040/readme.md new file mode 100644 index 0000000..31aaeb8 --- /dev/null +++ b/Assignment_040/readme.md @@ -0,0 +1,15 @@ +# Singleton-Eigenschaft von Enumerationen + + + +## Lernziel + +Die Singleton-Eigenschaft von Enumerationen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.singleton](../sources/src/main/java/pr2/enums/singleton/). + +Enumerationen werden in Java durch echte Klassen und Objekte dargestellt. Eine Besonderheit ist allerdings, dass von jeder Enumerationskonstante immer genau ein Objekt existiert, es sich also um Singletons handelt. Daher darf man Java-Enumerationen sicher mit `==` vergleichen. + +Schreiben Sie bitte ein kleines Java-Programm `SingletonBeweis`, das nachweist, dass es sich bei Enumerationen wirklich um Singletons handelt. Verwenden Sie dazu die bereits vorgegebene Enumeration `MyEnum`. \ No newline at end of file diff --git a/Assignment_041/readme.md b/Assignment_041/readme.md new file mode 100644 index 0000000..ab5618e --- /dev/null +++ b/Assignment_041/readme.md @@ -0,0 +1,23 @@ +# Eine vorhandene Enumeration nutzen + + + +## Lernziel + +Syntax von Enumerationen verstehen und einfache Einsatzzwecke kennenlernen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.verwenden](../sources/src/main/java/pr2/enums/verwenden/). + +In dieser Aufgabe sollen Sie mit einer vorhandenen Enumeration experimentieren. Sehen Sie sich hierzu die vorhandenen Klassen an. Insbesondere das Sprite `Professor`. + +Im Konstruktor von `Professor` wird eine Enumeration namens `BoundaryPolicy` genutzt. Schauen Sie sich die JavaDoc der Enumeration an und versuchen Sie zu verstehen, was gemeint ist. + +Testen Sie nun die verschiedenen Werte der Enumeration durch und betrachten Sie, wie sich das Sprite anders verhält. + +Überlegen Sie, warum hier eine Enumeration verwendet wurde und nicht etwas Vererbung mit dem Überschreiben von Methoden. + +## Abgabe + +Für diese Aufgabe ist keine Abgabe vorgesehen. \ No newline at end of file diff --git a/Assignment_042/img/schnick.png b/Assignment_042/img/schnick.png new file mode 100644 index 0000000000000000000000000000000000000000..9066a36a2e91065f492aae80f5eaff5d490c1b4b GIT binary patch literal 21428 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 IO`FL70u`ppoB#j- literal 0 HcmV?d00001 diff --git a/Assignment_042/readme.md b/Assignment_042/readme.md new file mode 100644 index 0000000..564b2e9 --- /dev/null +++ b/Assignment_042/readme.md @@ -0,0 +1,51 @@ +# Assignment: Stein, Papier, Schere, Echse, Spock + + + +## Lernziel + +Mit Enumerationen arbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.schnick](../sources/src/main/java/pr2/enums/schnick). + +![Regeln für Schnick-Schnack-Schnuck](img/schnick.png) + +Schreiben Sie ein einfaches Spiel (Klasse `SchnickSchnackSchnuck`), bei dem Sie gegen den Computer Schnick-Schnack-Schnuck spielen (auch Rock, Paper, Scissors genannt) mit folgenden Eigenschaften: + + * Das Spiel geht über drei Runden. + * Es fragt den Spieler nach seiner Auswahl (r, p, s). + * Der Computer zieht zufällig eine der drei Möglichkeiten. + * Nach jeder Runde sagt das Spiel, wer welche Möglichkeit gewählt hat und wer die Runde gewonnen hat. + * Ein Sieg bringt einen Punkt, ein Unentschieden 0 Punkte. + * Die Punkte jeder Runde werden addiert. + * Am Ende wird der Gesamtpunktestand ausgegeben. + +Eine beispielhafte Session mit dem Programm sieht dann wie folgt aus: + +```console +Runde 1: Dein Zug ([r]rock, [p]aper, [s]cissors)? r +Der Computer hat gewonnen - Du: ROCK, Computer: PAPER - [0:1] + +Runde 2: Dein Zug ([r]rock, [p]aper, [s]cissors)? p +Unentschieden - Du: PAPER, Computer: PAPER - [0:1] + +Runde 3: Dein Zug ([r]rock, [p]aper, [s]cissors)? s +Du hast gewonnen: Du: SCISSORS, Computer: PAPER - [1:1]### Abgabe +Ergebnis - Du 1 Punkt(e), Computer 1 Punkt(e) +``` + +Repräsentieren Sie die Züge mithilfe einer Enumeration `Move`. Diese soll auch die Tasten beinhalten, welche man für die einzelnen Züge (`r`, `p`, `s`) drücken muss. + + +## 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/readme.md b/readme.md index 7de8063..c0618a0 100644 --- a/readme.md +++ b/readme.md @@ -6,35 +6,47 @@ Hier finden Sie die **freiwilligen Übungen** zur Vorlesung Programmieren 2 (PR2 Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md). -| # | Ausgabe | Thema | -|----|-------------------------------------------------------------------------|----------------| -| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | -| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | -| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | -| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | -| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | -| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | -| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | -| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | -| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | -| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) | -| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | -| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | -| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | -| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | -| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | -| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | -| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | -| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | -| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | -| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | -| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | -| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | -| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | -| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) | -| 25. | 11.04.2023 | [Abstrakte Klassen](Assignment_025/readme.md) | -| 26. | 11.04.2023 | [Abstrakte Klasse](Assignment_026/readme.md) | -| 27. | 11.04.2023 | [Comparable implementieren](Assignment_027/readme.md) | -| 28. | 11.04.2023 | [Interface Stack entwerfen](Assignment_028/readme.md) | -| 29. | 11.04.2023 | [Interface: Uebersetzer](Assignment_029/readme.md) | -| 30. | 11.04.2023 | [Interfaces anwenden und entwerfen](Assignment_030/readme.md) | +| # | Ausgabe | Thema | +|----|------------------------------------------------------------------------------------|----------------| +| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | +| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | +| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | +| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | +| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | +| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | +| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | +| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | +| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | +| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) | +| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | +| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | +| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | +| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | +| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | +| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | +| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | +| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | +| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | +| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | +| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | +| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | +| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | +| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) | +| 25. | 11.04.2023 | [Abstrakte Klassen](Assignment_025/readme.md) | +| 26. | 11.04.2023 | [Abstrakte Klasse](Assignment_026/readme.md) | +| 27. | 11.04.2023 | [Comparable implementieren](Assignment_027/readme.md) | +| 28. | 11.04.2023 | [Interface Stack entwerfen](Assignment_028/readme.md) | +| 29. | 11.04.2023 | [Interface: Uebersetzer](Assignment_029/readme.md) | +| 30. | 11.04.2023 | [Interfaces anwenden und entwerfen](Assignment_030/readme.md) | +| 31. | 20.04.2023 | [Deep-Copy mit `clone()`](Assignment_031/readme.md) | +| 32. | 20.04.2023 | [Clone](Assignment_032/readme.md) | +| 33. | 20.04.2023 | [`equals()` und `hashCode()` implementieren und nutzen](Assignment_033/readme.md) | +| 34. | 20.04.2023 | [equals und hashCode](Assignment_034/readme.md) | +| 35. | 20.04.2023 | [`toString()`-Methode implementieren](Assignment_035/readme.md) | +| 36. | 20.04.2023 | [Optimierung bei Integer](Assignment_036/readme.md) | +| 37. | 20.04.2023 | [Methoden der Wrapper-Klassen](Assignment_037/readme.md) | +| 38. | 20.04.2023 | [Eigene Enumeration schreiben und verwenden](Assignment_038/readme.md) | +| 39. | 20.04.2023 | [Enumeration schreiben](Assignment_039/readme.md) | +| 40. | 20.04.2023 | [Singleton-Eigenschaft von Enumerationen](Assignment_040/readme.md) | +| 41. | 20.04.2023 | [Eine vorhandene Enumeration nutzen](Assignment_041/readme.md) | +| 42. | 20.04.2023 | [Stein, Papier, Schere, Echse, Spock](Assignment_042/readme.md) | diff --git a/sources/src/main/java/pr2/enums/eigene/Wuerfel.java b/sources/src/main/java/pr2/enums/eigene/Wuerfel.java new file mode 100644 index 0000000..cfac715 --- /dev/null +++ b/sources/src/main/java/pr2/enums/eigene/Wuerfel.java @@ -0,0 +1,52 @@ +package pr2.enums.eigene; + +import java.util.Random; + +/** + * Ein einfacher Würfel. + */ +public class Wuerfel { + + /** 4-seitiger Würfel. */ + public static final int D4 = 4; + + /** 6-seitiger Würfel. */ + public static final int D6 = 6; + + /** 8-seitiger Würfel. */ + public static final int D8 = 8; + + /** 10-seitiger Würfel. */ + public static final int D10 = 10; + + /** 12-seitiger Würfel. */ + public static final int D12 = 13; + + /** + * Zufallszahlengenerator. + */ + private final Random rnd = new Random(); + + /** + * Anzahl der Seiten des Würfels. + */ + private final int numSides; + + /** + * Einen neuen Würfel anlegen. + * + * @param typ Anzahl der Seiten des Würfels. + */ + public Wuerfel(int numSides) { + this.numSides = numSides; + } + + /** + * Den Würfel werfen. + * + * @return Ergebnis des Wurfes. + */ + public int roll() { + return rnd.nextInt(numSides) + 1; + } +} diff --git a/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java b/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java new file mode 100644 index 0000000..5760910 --- /dev/null +++ b/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java @@ -0,0 +1,59 @@ +package pr2.enums.eigene.test; + +import org.junit.jupiter.api.Test; +import pr2.enums.eigene.Wuerfel; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Test für die Würfel. + */ +public class WuerfelTest { + + /** + * Anzahl der Durchläufe (Gesetz der großen Zahl!). + */ + private static final int RUNS = 10000000; + + + @Test + void testFairnessD4() { + internalTestFairness(new Wuerfel(Wuerfel.D4), 2.5); + } + + @Test + void testFairnessD6() { + internalTestFairness(new Wuerfel(Wuerfel.D6), 3.5); + } + + @Test + void testFairnessD8() { + internalTestFairness(new Wuerfel(Wuerfel.D8), 4.5); + } + + @Test + void testFairnessD10() { + internalTestFairness(new Wuerfel(Wuerfel.D10), 5.5); + } + + @Test + void testFairnessD12() { + internalTestFairness(new Wuerfel(Wuerfel.D12), 6.5); + } + + /** + * Interne Hilfsmethode, um die Fairness zu testen. + * + * @param w der zu testende Wuerfel. + * @param expected Erwartungswert. + */ + private void internalTestFairness(Wuerfel w, double expected) { + long sum = 0; + + for (int i = 0; i < RUNS; i++) { + sum += w.roll(); + } + double average = (double) sum / (double) RUNS; + assertEquals(expected, average, 0.1); + } +} diff --git a/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java b/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java new file mode 100644 index 0000000..9643002 --- /dev/null +++ b/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java @@ -0,0 +1,5 @@ +package pr2.enums.filme; + +public enum LieblingsFilme { + +} diff --git a/sources/src/main/java/pr2/enums/filme/Main.java b/sources/src/main/java/pr2/enums/filme/Main.java new file mode 100644 index 0000000..50c23c8 --- /dev/null +++ b/sources/src/main/java/pr2/enums/filme/Main.java @@ -0,0 +1,7 @@ +package pr2.enums.filme; + +public class Main { + public static void main(String[] args) { + // TODO: Alle Filme ausgeben + } +} diff --git a/sources/src/main/java/pr2/enums/schnick/Move.java b/sources/src/main/java/pr2/enums/schnick/Move.java new file mode 100644 index 0000000..8f8180f --- /dev/null +++ b/sources/src/main/java/pr2/enums/schnick/Move.java @@ -0,0 +1,4 @@ +package pr2.enums.schnick; + +public enum Move { +} diff --git a/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java b/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java new file mode 100644 index 0000000..155464d --- /dev/null +++ b/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java @@ -0,0 +1,11 @@ +package pr2.enums.schnick; + +import java.util.Random; +import java.util.Scanner; + +/** + * Schick - Schnack - Schnuck (Rock - Paper - Scissors). + */ +public class SchnickSchnackSchnuck { + +} diff --git a/sources/src/main/java/pr2/enums/singleton/MyEnum.java b/sources/src/main/java/pr2/enums/singleton/MyEnum.java new file mode 100644 index 0000000..be83cc0 --- /dev/null +++ b/sources/src/main/java/pr2/enums/singleton/MyEnum.java @@ -0,0 +1,7 @@ +package pr2.enums.singleton; + +enum MyEnum { + A, + B, + C; +} diff --git a/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java b/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java new file mode 100644 index 0000000..40972f7 --- /dev/null +++ b/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java @@ -0,0 +1,8 @@ +package pr2.enums.singleton; + +public class SingletonBeweis { + + public static void main(String[] args) { + // TODO: Singleton-Eigenschaft zeigen + } +} diff --git a/sources/src/main/java/pr2/enums/verwenden/GameBoard.java b/sources/src/main/java/pr2/enums/verwenden/GameBoard.java new file mode 100644 index 0000000..a0c12b5 --- /dev/null +++ b/sources/src/main/java/pr2/enums/verwenden/GameBoard.java @@ -0,0 +1,47 @@ +package pr2.enums.verwenden; + +import de.smits_net.games.framework.board.Board; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Point; + +/** + * Spielfeld. + */ +public class GameBoard extends Board { + + /** + * Sprite, das durch das Bild läuft. + */ + private final Professor sprite; + + /** + * Erzeugt ein neues Board. + */ + public GameBoard() { + // neues Spielfeld anlegen + super(10, new Dimension(400, 400), Color.BLACK); + + // Sprite initialisieren + sprite = new Professor(this, new Point(300, 200)); + } + + /** + * Spielfeld neu zeichnen. Wird vom Framework aufgerufen. + */ + @Override + public void drawGame(Graphics g) { + sprite.draw(g, this); + } + + /** + * Spielsituation updaten. Wird vom Framework aufgerufen. + */ + @Override + public boolean updateGame() { + sprite.move(); + return sprite.isVisible(); + } +} diff --git a/sources/src/main/java/pr2/enums/verwenden/GameMain.java b/sources/src/main/java/pr2/enums/verwenden/GameMain.java new file mode 100644 index 0000000..becc1ae --- /dev/null +++ b/sources/src/main/java/pr2/enums/verwenden/GameMain.java @@ -0,0 +1,28 @@ +package pr2.enums.verwenden; + +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("Watch me walk...", new GameBoard()); + } + + /** + * Startpunkt. + * + * @param args command line arguments. + */ + public static void main(String[] args) { + // Spiel starten + EventQueue.invokeLater(GameMain::new); + } +} diff --git a/sources/src/main/java/pr2/enums/verwenden/Professor.java b/sources/src/main/java/pr2/enums/verwenden/Professor.java new file mode 100644 index 0000000..6d648a4 --- /dev/null +++ b/sources/src/main/java/pr2/enums/verwenden/Professor.java @@ -0,0 +1,32 @@ +package pr2.enums.verwenden; + +import de.smits_net.games.framework.board.Board; +import de.smits_net.games.framework.image.AnimatedImage; +import de.smits_net.games.framework.sprite.AnimatedSprite; +import de.smits_net.games.framework.sprite.Direction; + +import java.awt.Point; + +/** + * Ein Sprite. + */ +public class Professor extends AnimatedSprite { + + /** + * Geschwindigkeit der Figur in X-Richtung. + */ + private static final int SPRITE_SPEED = 2; + + /** + * Neues Sprite anlegen. + * + * @param board das Spielfeld + * @param startPoint Start-Position + */ + public Professor(Board board, Point startPoint) { + super(board, startPoint, BoundaryPolicy.NONE, + new AnimatedImage(50, 9, + "pr2/enums/use/professor_left")); + velocity.setVelocity(Direction.WEST, SPRITE_SPEED); + } +} diff --git a/sources/src/main/java/pr2/object/clone_alien/Alien.java b/sources/src/main/java/pr2/object/clone_alien/Alien.java new file mode 100644 index 0000000..0223a3d --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/Alien.java @@ -0,0 +1,91 @@ +package pr2.object.clone_alien; + +/** + * Ein Alien. + */ + public class Alien { + + /** + * Name des Aliens. + */ + private final String name; + + /** + * Raumanzug des Aliens. + */ + private Raumanzug raumanzug; + + /** + * Erzeugt ein neues Alien. + * + * @param name Name des Aliens. + * @param raumanzug Anzug. + */ + public Alien(String name, Raumanzug raumanzug) { + this.name = name; + this.raumanzug = raumanzug; + } + + /** + * Gibt den Namen des Aliens zurück. + * + * @return Name des Aliens. + */ + public String getName() { + return name; + } + + /** + * Gibt den Anzug zurück. + * + * @return der Anzug. + */ + public Raumanzug getAnzug() { + return raumanzug; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((raumanzug + == null) ? 0 : raumanzug.hashCode()); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Alien other = (Alien) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } + else if (!name.equals(other.name)) { + return false; + } + if (raumanzug == null) { + return other.raumanzug == null; + } + else { + return raumanzug.equals(other.raumanzug); + } + } + +} diff --git a/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java b/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java new file mode 100644 index 0000000..1658848 --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java @@ -0,0 +1,68 @@ +package pr2.object.clone_alien; + +/** + * Ein Raumanzug. + */ + public class Raumanzug { + + /** + * Sauerstoffvorrat, der noch im Raumanzug ist. + */ + private double sauerstoffVorrat; + + /** + * Ertzeugt einen neuen Raumanzug. + */ + public Raumanzug() { + sauerstoffVorrat = Math.random(); + } + + /** + * Sauerstoffvorrat im Anzug. + * + * @return Vorrat in % (0.0-1.0) + */ + public double getSauerstoffVorrat() { + return sauerstoffVorrat; + } + + /** + * Tankt den Anzug auf. + */ + public void auftanken() { + sauerstoffVorrat = 1.0; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(sauerstoffVorrat); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Raumanzug other = (Raumanzug) obj; + return Double.doubleToLongBits(sauerstoffVorrat) + == Double.doubleToLongBits(other.sauerstoffVorrat); + } + +} diff --git a/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java b/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java new file mode 100644 index 0000000..c30dff5 --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java @@ -0,0 +1,38 @@ +package pr2.object.clone_alien.test; + +import org.junit.jupiter.api.Test; +import pr2.object.clone_alien.Alien; +import pr2.object.clone_alien.Raumanzug; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +/** + * Test für die Clone-Methoden. + */ +public class AlienCloneTest { + + /** + * Test-Methode. + * + * @throws CloneNotSupportedException wird geworfen, wenn clone_alien + * nicht korrekt implementiert wurde. + */ + @Test + void testClone() throws CloneNotSupportedException { +// TODO: Einkommentieren +// Raumanzug r1 = new Raumanzug(); +// Alien a1 = new Alien("Predator", r1); +// +// Alien a2 = (Alien) a1.clone(); +// Raumanzug r2 = a2.getAnzug(); +// +// assertNotSame(a1, a2); +// assertNotSame(r1, r2); +// +// assertEquals(a1, a2); +// assertEquals(r1, r2); +// assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(), +// 0.0001); + } +} diff --git a/sources/src/main/java/pr2/object/clone_person/Person.java b/sources/src/main/java/pr2/object/clone_person/Person.java new file mode 100644 index 0000000..934ec8d --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_person/Person.java @@ -0,0 +1,22 @@ +package pr2.object.clone_person; + +import java.util.Date; + + public class Person { + + private final String vorname = ""; + private final String nachname = ""; + private Date geburtsdatum = new Date(); + + // TODO: clone implementieren + + + @Override + public String toString() { + return "Person{" + + "vorname='" + vorname + '\'' + + ", nachname='" + nachname + '\'' + + ", geburtsdatum=" + geburtsdatum + + '}'; + } +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/Ork.java b/sources/src/main/java/pr2/object/equals_hashcode/Ork.java new file mode 100644 index 0000000..60dd23e --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/Ork.java @@ -0,0 +1,29 @@ +package pr2.object.equals_hashcode; + +/** + * Ork. + */ +public class Ork extends Wesen { + + /** + * Stärke der Orks. + */ + private static final int ORK_STAERKE = 17; + + /** + * Zeigt an, ob der Ork gut oder böse ist. + */ + private final boolean boese; + + /** + * Legt einen neuen Ork an. + * + * @param name Name des Orks. + * @param boese zeigt an, ob der Ork gut oder böse ist + */ + public Ork(String name, boolean boese) { + super(name, ORK_STAERKE); + this.boese = boese; + } + +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java b/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java new file mode 100644 index 0000000..a40709d --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java @@ -0,0 +1,29 @@ +package pr2.object.equals_hashcode; + +/** + * Ein Wesen in der Spielwelt. + */ +public class Wesen { + + /** + * Name des Wesens. + */ + private final String name; + + /** + * Stärke des Wesens. + */ + private final int staerke; + + /** + * Legt ein neues Wesen an. + * + * @param name Name des Wesens. + * @param staerke Stärke des Wesens. + */ + public Wesen(String name, int staerke) { + this.name = name; + this.staerke = staerke; + } + +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java b/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java new file mode 100644 index 0000000..bdbe397 --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java @@ -0,0 +1,87 @@ +package pr2.object.equals_hashcode.test; + +import org.junit.jupiter.api.Test; +import pr2.object.equals_hashcode.Ork; +import pr2.object.equals_hashcode.Wesen; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +/** + * Testklasse für die Wesen. + */ +public class WesenTest { + + /** + * Testet equals und hashCode von Wesen. + */ + @Test + void testWesen() { + Wesen w1 = new Wesen("Azok", 30); + Wesen w2 = new Wesen("Azok", 30); + Wesen w3 = new Wesen("Azok", 31); + Wesen w4 = new Wesen("Gorrok", 30); + Wesen w5 = new Wesen("Gorrok", 31); + + assertNotSame(w1, w2); + assertEquals(w1, w2); + + assertNotSame(w1, w3); + assertNotEquals(w1, w3); + + assertNotSame(w1, w4); + assertNotEquals(w1, w4); + + assertNotSame(w1, w5); + assertNotEquals(w1, w5); + + assertEquals(w1.hashCode(), w2.hashCode()); + } + + /** + * Testet equals und hashCode von Ork. + */ + @Test + void testOrk() { + Ork o1 = new Ork("Snagas", true); + Ork o2 = new Ork("Snagas", true); + Ork o3 = new Ork("Snagas", false); + Ork o4 = new Ork("Berg-Ork", false); + Ork o5 = new Ork("Berg-Ork", true); + Ork o6 = new Ork("Berg-Ork", false); + Wesen w = new Wesen("Snagas", 17); + + assertNotSame(o1, o2); + assertEquals(o1, o2); + + assertNotSame(o1, o3); + assertNotEquals(o1, o3); + + assertNotSame(o1, o4); + assertNotEquals(o1, o4); + + assertNotSame(o1, o5); + assertNotEquals(o1, o5); + + assertEquals(o1.hashCode(), o2.hashCode()); + assertEquals(o4.hashCode(), o6.hashCode()); + + assertNotEquals(w, o1); + assertNotEquals(w, o2); + assertNotEquals(w, o3); + assertNotEquals(null, o1); + assertNotEquals("Hugo", o1); + assertEquals(o1, o1); + + // Diese Tests muss nicht zwangsweise funktionieren, da + // ungleiche Objekte einen identischen Hashcode haben können. + // Wir gehen hier aber davon aus, dass eine Hashkollision + // sehr selten ist und machen daher aus didaktischen Gründen + // diesen Test. + assertNotEquals(o1.hashCode(), o3.hashCode()); + assertNotEquals(o1.hashCode(), o4.hashCode()); + assertNotEquals(o1.hashCode(), o5.hashCode()); + assertNotEquals(o4.hashCode(), o5.hashCode()); + } +} diff --git a/sources/src/main/java/pr2/object/equals_person/Person.java b/sources/src/main/java/pr2/object/equals_person/Person.java new file mode 100644 index 0000000..1c32ed4 --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_person/Person.java @@ -0,0 +1,10 @@ +package pr2.object.equals_person; + +public class Person { + + private String vorname; + private String nachname; + private int alter; + + // TODO: equals und hashCode implementieren +} diff --git a/sources/src/main/java/pr2/object/tostring/Alien.java b/sources/src/main/java/pr2/object/tostring/Alien.java new file mode 100644 index 0000000..4bbaa28 --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Alien.java @@ -0,0 +1,47 @@ +package pr2.object.tostring; + +/** + * Ein Alien. + */ +public class Alien implements Cloneable { + + /** + * Name des Aliens. + */ + private final String name; + + /** + * Raumanzug des Aliens. + */ + private final Raumanzug raumanzug; + + /** + * Erzeugt ein neues Alien. + * + * @param name Name des Aliens. + * @param raumanzug Anzug. + */ + public Alien(String name, Raumanzug raumanzug) { + this.name = name; + this.raumanzug = raumanzug; + } + + /** + * Gibt den Namen des Aliens zurück. + * + * @return Name des Aliens. + */ + public String getName() { + return name; + } + + /** + * Gibt den Anzug zurück. + * + * @return der Anzug. + */ + public Raumanzug getAnzug() { + return raumanzug; + } + +} diff --git a/sources/src/main/java/pr2/object/tostring/Ausgabe.java b/sources/src/main/java/pr2/object/tostring/Ausgabe.java new file mode 100644 index 0000000..637f3c6 --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Ausgabe.java @@ -0,0 +1,24 @@ +package pr2.object.tostring; + +/** + * Ausgabe. + */ +public final class Ausgabe { + + /** + * Konstruktor. + */ + private Ausgabe() { + // keine Objekte. + } + + /** + * Einstiegspunkt in das Programm. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + Alien alien = new Alien("E.T.", new Raumanzug("Spaceman 2000")); + System.out.println(alien); + } +} diff --git a/sources/src/main/java/pr2/object/tostring/Raumanzug.java b/sources/src/main/java/pr2/object/tostring/Raumanzug.java new file mode 100644 index 0000000..57f653e --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Raumanzug.java @@ -0,0 +1,44 @@ +package pr2.object.tostring; + +/** + * Ein Raumanzug. + */ +public class Raumanzug implements Cloneable { + + /** + * Hersteller des Raumanzuges. + */ + private final String hersteller; + + /** + * Sauerstoffvorrat, der noch im Raumanzug ist. + */ + private double sauerstoffVorrat; + + /** + * Ertzeugt einen neuen Raumanzug. + * + * @param hersteller Hersteller des Anzuges. + */ + public Raumanzug(String hersteller) { + this.hersteller = hersteller; + sauerstoffVorrat = Math.random(); + } + + /** + * Sauerstoffvorrat im Anzug. + * + * @return Vorrat in % (0.0-1.0) + */ + public double getSauerstoffVorrat() { + return sauerstoffVorrat; + } + + /** + * Tankt den Anzug auf. + */ + public void auftanken() { + sauerstoffVorrat = 1.0; + } + +} diff --git a/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java b/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java new file mode 100644 index 0000000..d760cbd --- /dev/null +++ b/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java @@ -0,0 +1,8 @@ +package pr2.object.wrapper_boxsearch; + +public class BoxSearcher { + + public static void main(String[] args) { + // TODO: Grenze suchen und Ergebnis ausgeben + } +} diff --git a/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java b/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java new file mode 100644 index 0000000..2fc0727 --- /dev/null +++ b/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java @@ -0,0 +1,45 @@ +package pr2.object.wrapper_umwandler; + +/** + * Enthält Methoden, um Integer-Zahlen umzuwandeln. + */ +public final class Umwandler { + + /** + * Konstruktor. + */ + private Umwandler() { + // keine Instanzen + } + + /** + * Wandelt eine Zahl in meherer Formate um. + * + * @param i die Zahl. + * @return String mit mehreren Formaten. + */ + public static String toString(int i) { + return null; + } + + /** + * Wandelt einen String (zur Basis 10) in eine Zahl um. + * + * @param s String, der umgewandelt werden soll + * @return Umgewandelte Zahl + */ + public static int fromString(String s) { + return 0; + } + + /** + * Einstiegspunkt in das Programm. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + String s = "17871"; + int i = fromString(s); + System.out.println(toString(i)); + } +}