Update of exercises

kts
Thomas Smits 2023-03-24 08:40:44 +01:00
parent 62b2c05450
commit 77c96ea8de
66 changed files with 1131 additions and 26 deletions

View File

@ -1,6 +1,6 @@
# String in Großbuchstaben umwandeln
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Labeled Break
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Passwortbewertung
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# printf mit Formatstring
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Maximum in einem Array suchen
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Taschenrechner
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Quine
📆 **Fällig: 26.03.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Java-Coding-Standard anwenden
📆 **Fällig: 01.01.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# JavaDoc schreiben
📆 **Fällig: 01.01.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Klasse mit JUnit testen
📆 **Fällig: 01.01.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Information-Hiding einer Klasse verbessern
📆 **Fällig: 01.01.2023** 📆
## Lernziel

View File

@ -1,6 +1,6 @@
# Vorhandene Bibliotheken als JAR einbinden
📆 **Fällig: 01.01.2023** 📆
## Lernziel

View File

@ -0,0 +1,24 @@
# Final anwenden
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben.
## Aufgabe
Im Paket [pr2.vererbung.finals](../sources/src/main/java/pr2/vererbung/finals/) finden Sie zwei Klassen `A` und `B`.
Durch einen Fehler sind hier alle `final` Schlüsselwort verloren gegangen. Bitte schreiben Sie an alle Stellen, an denen dies möglich ist einen `final`-Modifier.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,28 @@
# Figur und Rechteck
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Vererbung sinnvoll einsetzen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.geometrie1](../sources/src/main/java/pr2/vererbung/geometrie1/).
Schreiben Sie eine Klasse `Figur`, die als einziges Attribut die Fläche der Figur hat. Bieten Sie weiterhin eine Methode `getFlaeche()` an, mit der die Fläche wieder ausgelesen werden kann. Sorgen Sie dafür, dass nur Subklassen den Konstruktor dieser Klasse aufrufen können und dass das Attribut mit der Fläche ebenfalls nur für Subklassen verfügbar ist.
Leiten Sie von der Klasse `Figur` eine Klasse `Rechteck` ab. Das Rechteck soll durch Höhe und Breite beschrieben werden und diese Werte sollen benutzt werden, um die Fläche der Figur zu setzen.
Schreiben Sie eine Klasse `Main` mit einer `main`-Methode, welche Ihre beiden gerade entwickelten Klassen nutzt.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,24 @@
# Figur erweitern
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Vererbung sinnvoll einsetzen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.geometrie2](../sources/src/main/java/pr2/vererbung/geometrie2/).
Verändern Sie die Klasse `Figur` aus der vorhergehenden Aufgabe so, dass das Attribut mit der Fläche nur noch innerhalb der Klasse sichtbar ist. Verändern Sie den Konstruktor und die Klasse `Rechteck` entsprechend, damit sich das Verhalten der Klassen nicht ä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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,30 @@
# Figur noch einmal erweitern
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Vererbung sinnvoll einsetzen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.geometrie3](../sources/src/main/java/pr2/vererbung/geometrie3/).
Erweitern Sie die Klasse `Figur` aus der vorhergehenden Aufgabe so, dass man Objekte ohne Angabe einer Fläche erzeugen kann. Diese Objekte sollen dann die Fläche `0` haben. Die Klasse `Rechteck` soll weiter funktionieren.
Schreiben Sie eine Klasse `Gerade`, die von `Figur` abgeleitet ist und als Attribut die Länge der Geraden hat, deren Fläche aber logischerweise `0` ist.
Schreiben Sie eine Klasse `Rechteck`, die von der Klasse `Form` abgeleitet ist und als zusätzliche Attribute die Länge und Breite des Rechtecks enthält.
Schreiben Sie eine Klasse `Quadrat`, die von der Klasse `Rechteck` abgeleitet 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,38 @@
# Konstruktoren schreiben
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen.
## Aufgabe
Im Paket [pr2.vererbung.konstruktoren](../sources/src/main/java/pr2/vererbung/konstruktoren/) finden Sie die Klassen, welche Charaktere in einem Spiel repräsentieren.
Sie sollen Klassen entwickeln, welche Charaktere in einem Spiel repräsentieren. Es gibt in dem Spiel zwei Rassen:
* die _Nachtelfen_ mit der Spezialfähigkeit _Naturwiderstand_ und
* die _Untoten_ mit der Spezialfähigkeit _Unterwasseratmung_.
Ausgehend von der Klasse `Wesen` sollen die beiden Rassen durch zwei Klassen `Untoter` und `Nachtelf` repräsentiert werden. Diese Klassen sind auch bereits vorhanden, allerdings fehlen die Konstruktoren und die Vererbung ist noch nicht deklariert.
Leiten Sie die beiden Klassen also von `Wesen` ab und schreiben Sie entsprechende Konstruktoren. Beide Klassen sollen zwei Konstruktoren haben:
* bei einem kann man den Namen und die Stärke der Spezialfähigkeit mitgeben,
* beim anderen nur den Namen; die Spezialfähigkeit soll dann dem Standardwert entsprechen.
### Test
Testen Sie die Funktionsweise Ihrer Konstruktoren mit dem vorgegebenen JUnit-Test. Entfernen Sie die Kommentare, um die entsprechenden Tests zu aktivieren und importieren Sie die noch fehlenden Klassen und Methoden.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,36 @@
# Polymorphie einsetzen
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Durch Polymorphie Subklassen wie Basisklassen behandeln können.
## Aufgabe
Im Paket [pr2.vererbung.polymorphie](../sources/src/main/java/pr2/vererbung/polymorphie/) finden Sie Klassen, welche Tiere in einem Zoo repräsentieren.
In dieser Aufgabe geht es darum, einen Zoo zu simulieren. In dem Zoo gibt es _Affen_, _Gorillas_ und _Giraffen_. Die Tiere sind oft hungrig und müssen deshalb gefüttert werden. Hierzu dient die Klasse `Futterstelle`, die für die verschiedenen Tierarten entsprechende Fütterungsmethoden hat.
### UML-Diagramm
Sehen Sie sich die Klassen für die verschiedenen Tiere, die `Futterstelle` und `ZooSimulation` genau an und zeichnen Sie danach ein UML-Diagramm der Klassen und ihrer Beziehungen.
### Futterstelle
Schreiben Sie die Klasse `Futterstelle` so um, dass sie Polymorphie nutzt, um alle Tiere mit nur einer einzigen Methode zu füttern.
Schreiben Sie danach die Klasse `ZooSimulation` so um, dass Sie anstatt von drei Variablen `charlie`, `buck` und `debbie` ein einziges Array `tiere` verwendet.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,24 @@
# Singleton
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Das Design-Pattern _Singleton_ einsetzen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.singleton_einfach](../sources/src/main/java/pr2/vererbung/singleton_einfach/).
Schreiben Sie eine Klasse `Singelton`, die ein Singleton 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,35 @@
# Statische Methoden und Attribute
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen.
## Aufgabe
Im Paket [pr2.vererbung.statics](../sources/src/main/java/pr2/vererbung/statics/) finden Sie zwei Klassen.
Sie finden in der Aufgabe eine Klasse `Wuerfel`, die einen normalen sechsseitigen Würfel repräsentiert und eine Klasse `Spiel`, die Würfel benutzt. Um zu Überprüfen, ob die Würfel gezinkt sind, enthält jeder Würfel eine Methode `statistik()`, die eine Statistik über die geworfenen Augenzahlen ausgibt.
Der Nachteil der jetzigen Lösung ist, dass die Statistik nur pro Würfel erhältlich ist, nicht aber über alle Würfel hinweg.
Ändern Sie die Klasse `Wuerfel` so, dass
* die Statistik über alle innerhalb des Programms verwendeten Würfel berechnet wird und
* die Verteilung auf die einzelnen Augen in Prozent und nicht mehr als absolute Zahl ausgegeben wird.
Möglicherweise müssen Sie noch eine kleine Anpassung in der Klasse `Spiel` vornehmen.
Testen Sie Ihr Programm, indem Sie es mehrmals laufen lassen und prüfen Sie, ob der Würfel fair ist. Bei dieser Aufgabe dürfen Sie auf JUnit-Tests verzichten.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,26 @@
# Methode überladen
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Methoden überladen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.ueberladen_summe](../sources/src/main/java/pr2/vererbung/ueberladen_summe).
Schreiben Sie eine Klasse `Summator` mit einer Methode `sum`, die zwei Zahlen addiert und das Ergebnis zurückgibt. Überladen Sie die Methode so, dass sie drei, vier und fünf Zahlen addieren kann.
Kommentieren Sie die mitgelieferten Tests ein und führen Sie sie aus.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,30 @@
# Methoden überschreiben
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Bei Vererbung das Überschreiben von Methoden einsetzen.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.ueberschreiben_lebewesen](../sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/).
Schreiben Sie eine Klasse `Lebewesen`. Diese Klasse soll eine öffentliche Methode `bewegen` haben. Die Methode nimmt keine Parameter und hat keinen Rückgabewert. Die Implementierung in `Lebewesen` soll leer sein.
Schreiben Sie eine Klasse `Amoebe`, die von `Lebewesen` abgeleitet ist, die `bewegen`-Methode überschreibt und in der Methode den Text "Schleimen" ausgibt.
Schreiben Sie eine Klasse `Dackel`, die von `Lebewesen` abgeleitet ist, die `bewegen`-Methode überschreibt und in der Methode den Text "Auf kurzen Beinen vorwärts wackeln" ausgibt. Fügen Sie weiterhin eine Methode `bellen()` zum `Dackel` hinzu, die die Ausgabe "Wau wau wau" erzeugt.
Schreiben Sie einen kleinen Test, bei dem Sie zwei Referenzvariablen (`l1` und `l2`) vom Typ `Lebewesen` erzeugen und dann damit einen neu erzeugten `Dackel` (mit `l1`) und eine neu erzeugte `Amoebe` mit (`l2`) verwalten. Rufen Sie auf beiden die Methode `bewegen` auf. Casten Sie danach die Variable `l1`, die auf den Dackel zeigt, auf einen `Dackel` und rufen Sie die `bellen`-Methode auf, wobei Sie sich vorher mit `instanceof` versichern, dass auch wirklich ein `Dackel` vorliegt.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,28 @@
# Varag-Methode schreiben
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Eine Varag-Methode schreiben.
## Aufgabe
Gehen Sie in das Paket [pr2.vererbung.vararg_summe](../sources/src/main/java/pr2/vererbung/vararg_summe/).
Schreiben Sie eine Klasse `Summator` mit einer Methode `sum`, die zwei oder drei Zahlen addiert und das Ergebnis zurückgibt.
Schreiben Sie eine **vararg**-Methode, die das Addieren beliebig vieler Zahlen realisiert.
Kommentieren Sie die mitgelieferten Tests ein und führen Sie sie aus.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -0,0 +1,54 @@
# Vererbung von Figuren
📆 **Fällig: 01.01.2023** 📆
## Lernziel
Einfache Klassen schreiben und eine Vererbungshierarchie bilden.
## Aufgabe
Denken Sie bei den folgenden Aufgaben daran, Pakete zu verwenden.
### Figur und Rechteck
Im Paket [pr2.vererbung.vererbung_geometrie](../sources/src/main/java/pr2/vererbung/vererbung_geometrie/) finden Sie Klassen, welche geometrische Figuren repräsentieren.
Die Klasse `Figur` soll als einziges Attribut die Fläche der Figur haben. Bieten Sie weiterhin eine Methode `getFlaeche()` an, mit der die Fläche wieder ausgelesen werden kann. Sorgen Sie dafür, dass nur Subklassen den Konstruktor dieser Klasse aufrufen können. Machen Sie das Attribut `flaeche` private.
Leiten Sie von der Klasse `Figur` eine Klasse `Rechteck` ab. Das Rechteck soll durch Höhe und Breite beschrieben werden und diese Werte sollen benutzt werden, um die Fläche der Figur zu setzen.
### Erweiterung der Figur
Erweitern Sie die Klasse `Figur` so, dass man Objekte ohne Angabe einer Fläche erzeugen kann. Diese Objekte sollen dann die Fläche `0` haben. Die Klasse `Rechteck` soll weiter funktionieren.
### Dreieck
Schreiben Sie eine Klasse `Dreieck`, die von der Klasse `Figur` abgeleitet ist und über Grundseite und Höhe definiert wird.
### Gerade
Schreiben Sie eine Klasse `Gerade`, die von `Figur` abgeleitet ist und als Attribut die Länge der Geraden hat, deren Fläche aber logischerweise `0` ist.
### Quadrat
Schreiben Sie eine Klasse `Quadrat` und leiten Sie diese sinnvoll von den bereits vorhandenen Klassen ab. Überlegen Sie sich, welche Informationen Sie für die Berechnung der Fläche benötigen.
### Tests
Schreiben Sie Unit-Tests, die die von Ihnen entwickelten Klassen testen.
### UML-Diagramm
Zeichnen Sie ein UML-Diagramm von Ihrer Lösung.
## 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. Rufen Sie mit `bin/submit.sh` das Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren.

View File

@ -6,17 +6,29 @@ Hier finden Sie die freiwilligen Übungen zur Vorlesung Programmieren 2 (PR2). D
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. | 01.01.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) |
| 9. | 01.01.2023 | [JavaDoc schreiben](Assignment_009/readme.md) |
| 10. | 01.01.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) |
| 11. | 01.01.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) |
| 12. | 01.01.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) |
| # | Ausgabe | Thema | Fällig am 📆 |
|----|------------|-------------------------------------------------------------------------|----------------|
| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | **26.03.2023** |
| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | **26.03.2023** |
| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | **26.03.2023** |
| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | **26.03.2023** |
| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | **26.03.2023** |
| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | **26.03.2023** |
| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | **26.03.2023** |
| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | **01.01.2023** |
| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | **01.01.2023** |
| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) | **01.01.2023** |
| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | **01.01.2023** |
| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | **01.01.2023** |
| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | **01.01.2023** |
| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | **01.01.2023** |
| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | **01.01.2023** |
| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | **01.01.2023** |
| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | **01.01.2023** |
| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | **01.01.2023** |
| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | **01.01.2023** |
| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | **01.01.2023** |
| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | **01.01.2023** |
| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | **01.01.2023** |
| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | **01.01.2023** |
| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) | **01.01.2023** |

View File

@ -0,0 +1,32 @@
package pr2.vererbung.finals;
/**
* A-Klasse.
*/
public class A {
/**
* Konstante für die Vorzeichenumkehr.
*/
public static int KONSTANTE = 100;
/**
* Addiert zwei Zahlen. Wenn das Ergebnis größer ist als
* der Wert von <code>KONSTANTE</code>, dann wird das
* Vorzeichen umgekehrt.
*
* @param a erster Wert
* @param b zweiter Wert
* @return Ergebnis
*/
public int add(int a, int b) {
int result = a + b;
if (result > KONSTANTE) {
return result * -1;
}
else {
return result;
}
}
}

View File

@ -0,0 +1,22 @@
package pr2.vererbung.finals;
/**
* B-Klasse.
*/
public class B extends A {
/**
* Subtrahiert zwei Zahlen. Wenn das Ergebnis kleiner ist als
* der Wert von <code>KONSTANTE</code>, dann wird das
* Vorzeichen umgekehrt.
*
* @param a erster Wert
* @param b zweiter Wert
* @return Ergebnis
*/
public static int sub(int a, int b) {
int result = a + b;
return (result < KONSTANTE) ? (result * -1) : (result);
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie1;
public class Figur {
}

View File

@ -0,0 +1,8 @@
package pr2.vererbung.geometrie1;
public class Main {
public static void main(String[] args) {
// TODO: Klassen nutzen
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie1;
public class Rechteck {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie2;
public class Figur {
}

View File

@ -0,0 +1,8 @@
package pr2.vererbung.geometrie2;
public class Main {
public static void main(String[] args) {
// TODO: Klassen nutzen
}
}

View File

@ -0,0 +1,6 @@
package pr2.vererbung.geometrie2;
public class Rechteck {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie3;
public class Dreieck {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie3;
public class Figur {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie3;
public class Gerade {
}

View File

@ -0,0 +1,7 @@
package pr2.vererbung.geometrie3;
public class Main {
public static void main(String[] args) {
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.geometrie3;
public class Quadrat {
}

View File

@ -0,0 +1,6 @@
package pr2.vererbung.geometrie3;
public class Rechteck {
}

View File

@ -0,0 +1,28 @@
package pr2.vererbung.konstruktoren;
/**
* Nachtelf aus der Allianz.
*/
public class Nachtelf {
/**
* Standardmäßige Stärke der Fähigkeit Naturwiderstand.
*/
public static final int STANDARD_NATURWIDERSTAND = 5;
/**
* Fähigkeit zum Widerstand gegen Naturmagie.
*/
private int naturwiderstand;
// TODO: Konstruktoren implementieren
/**
* Stärke des Naturwiderstandes.
*
* @return the naturwiderstand
*/
public int getNaturwiderstand() {
return naturwiderstand;
}
}

View File

@ -0,0 +1,28 @@
package pr2.vererbung.konstruktoren;
/**
* Untoter aus der Horde.
*/
public class Untoter {
/**
* Standardmäßige Stärke der Fähigkeit zur Unterwasseratmung.
*/
public static final int STANDARD_UNTERWASSERATMUNG = 10;
/**
* Fähigkeit zur Atmung unter Wasser.
*/
private int unterwasseratmung;
// TODO: Konstruktoren implementieren
/**
* Fähigkeit zur Unterwasseratmnung.
*
* @return the Stärke der Fähigkeit.
*/
public int getUnterwasseratmung() {
return unterwasseratmung;
}
}

View File

@ -0,0 +1,30 @@
package pr2.vererbung.konstruktoren;
/**
* Basisklasse für Spielfiguren.
*/
public class Wesen {
/**
* Name der Spielfigur.
*/
private final String name;
/**
* Legt eine neue Spielfigur an.
*
* @param name Name der Figur.
*/
public Wesen(String name) {
this.name = name;
}
/**
* Gibt den Namen der Spielfigur zurück.
*
* @return Name der Spielfigur.
*/
public String getName() {
return name;
}
}

View File

@ -0,0 +1,49 @@
package pr2.vererbung.konstruktoren.test;
import org.junit.jupiter.api.Test;
import pr2.vererbung.konstruktoren.Nachtelf;
import pr2.vererbung.konstruktoren.Untoter;
import pr2.vererbung.konstruktoren.Wesen;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test für die Aufgabe.
*/
public class WesenTest {
/**
* Testet den Nachtelf.
*/
@Test
void testNachtelf() {
// TODO: Einkommentieren
// assertTrue(new Nachtelf("") instanceof Wesen,
// "Nachtelf erbt nicht " + "von Wesen");
//
// assertEquals(Nachtelf.STANDARD_NATURWIDERSTAND,
// new Nachtelf("").getNaturwiderstand());
//
// assertEquals(120, new Nachtelf("", 120).getNaturwiderstand());
//
// assertEquals("Hugo", new Nachtelf("Hugo").getName());
}
/**
* Testet den Untoten.
*/
@Test
void testUntoten() {
// TODO: Einkommentieren
// assertTrue(new Untoter("") instanceof Wesen,
// "Untoter erbt nicht von " + "Wesen");
//
// assertEquals(Untoter.STANDARD_UNTERWASSERATMUNG,
// new Untoter("").getUnterwasseratmung());
//
// assertEquals(120, new Untoter("", 120).getUnterwasseratmung());
//
// assertEquals("Hugo", new Untoter("Hugo").getName());
}
}

View File

@ -0,0 +1,16 @@
package pr2.vererbung.polymorphie;
/**
* Ein Affe im Zoo.
*/
public class Affe extends ZooTier {
/**
* Legt einen neuen Affen an.
*
* @param name Name des Affen.
*/
public Affe(String name) {
super(name);
}
}

View File

@ -0,0 +1,35 @@
package pr2.vererbung.polymorphie;
/**
* Fütterung der Tiere.
*/
public class Futterstelle {
/**
* Füttert den Affen.
*
* @param affe Affe, der gefüttert werden soll.
*/
public void gibFutter(Affe affe) {
affe.fuettern();
}
/**
* Füttert den Gorilla.
*
* @param gorilla Gorilla, der gefüttert werden soll.
*/
public void gibFutter(Gorilla gorilla) {
gorilla.fuettern();
}
/**
* Füttert die Giraffe.
*
* @param giraffe Giraffe, die gefüttert werden soll.
*/
public void gibFutter(Giraffe giraffe) {
giraffe.fuettern();
}
}

View File

@ -0,0 +1,16 @@
package pr2.vererbung.polymorphie;
/**
* Eine Giraffe im Zoo.
*/
public class Giraffe extends ZooTier {
/**
* Legt einen neue Giraffe an.
*
* @param name Name der Giraffe.
*/
public Giraffe(String name) {
super(name);
}
}

View File

@ -0,0 +1,16 @@
package pr2.vererbung.polymorphie;
/**
* Ein Gorilla.
*/
public class Gorilla extends Affe {
/**
* Legt einen neuen Gorilla an.
*
* @param name Name des Gorilla.
*/
public Gorilla(String name) {
super(name);
}
}

View File

@ -0,0 +1,41 @@
package pr2.vererbung.polymorphie;
/**
* Simulationsklasse.
*/
public final class ZooSimulation {
/**
* Konstruktor.
*/
private ZooSimulation() {
// keine Objekte benötigt
}
/**
* Main-Methode.
*
* @param args Kommandozeilen-Argumente.
*/
public static void main(String[] args) {
Futterstelle futterstelle = new Futterstelle();
Affe charlie = new Affe("Charlie");
Gorilla buck = new Gorilla("Buck");
Giraffe debbie = new Giraffe("Debbie");
System.out.println(charlie);
System.out.println(buck);
System.out.println(debbie);
System.out.println("Fütterung...");
futterstelle.gibFutter(charlie);
futterstelle.gibFutter(buck);
futterstelle.gibFutter(debbie);
System.out.println(charlie);
System.out.println(buck);
System.out.println(debbie);
}
}

View File

@ -0,0 +1,41 @@
package pr2.vererbung.polymorphie;
/**
* Ein Tier im Zoo.
*/
public class ZooTier {
/**
* Name des Tiers.
*/
private final String name;
/**
* Zeigt an, ob das Tier hungrig ist.
*/
private boolean hungrig = true;
/**
* Legt ein neues Zootier an.
*
* @param name Name des Tiers
*/
public ZooTier(String name) {
this.name = name;
}
/**
* Gibt dem Tier futter.
*/
public void fuettern() {
hungrig = false;
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return name + ": Ich bin " + (hungrig ? "hungrig" : "satt") + "!";
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.singleton_einfach;
public class Singleton {
}

View File

@ -0,0 +1,37 @@
package pr2.vererbung.statics;
/**
* Spiel mit den Würfeln.
*/
public final class Spiel {
/**
* Keine Objekte.
*/
private Spiel() {
// leer
}
/**
* Programm-Einstieg.
*
* @param args Kommandozeilen-Argumente.
*/
public static void main(String[] args) {
Wuerfel wuerfel1 = new Wuerfel();
Wuerfel wuerfel2 = new Wuerfel();
// 1000 Mal würfeln
for (int i = 0; i < 1000; i++) {
wuerfel1.wuerfele();
wuerfel2.wuerfele();
}
// Statistik ausgeben
System.out.println("Statistik für Würfel 1");
System.out.println(wuerfel1.statistik());
System.out.println();
System.out.println("Statistik für Würfel 2");
System.out.println(wuerfel2.statistik());
}
}

View File

@ -0,0 +1,44 @@
package pr2.vererbung.statics;
import java.util.Random;
/**
* Ein einfacher Würfel.
*/
public class Wuerfel {
/** Häufigkeit der Werte. */
private int[] haeufigkeit = new int[6];
/** Zufallsgenerator. */
private Random random = new Random();
/**
* Bestimmt den nächsten Wurf.
*
* @return der Wurf.
*/
public int wuerfele() {
int wert = random.nextInt(6);
haeufigkeit[wert]++;
return wert + 1;
}
/**
* Gibt die Häufigkeit der Würfe zurück.
*
* @return die Statistik mit der Häufigkeit.
*/
public String statistik() {
StringBuilder result = new StringBuilder();
for (int i = 0; i < haeufigkeit.length; i++) {
result.append(i + 1)
.append(": ")
.append(haeufigkeit[i])
.append("\n");
}
return result.toString();
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.ueberladen_summe;
public class Summator {
}

View File

@ -0,0 +1,23 @@
package pr2.vererbung.ueberladen_summe.test;
import org.junit.jupiter.api.Test;
import pr2.vererbung.ueberladen_summe.Summator;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SummatorTest {
@Test
void testSum() {
// TODO: Einkommentieren
// Summator s = new Summator();
// assertEquals(3, s.sum(1, 2));
// assertEquals(1, s.sum(-1, 2));
// assertEquals(6, s.sum(1, 2, 3));
// assertEquals(0, s.sum(1, 2, -3));
// assertEquals(10, s.sum(1, 2, 3, 4));
// assertEquals(2, s.sum(1, 2, 3, -4));
// assertEquals(15, s.sum(1, 2, 3, 4, 5));
// assertEquals(5, s.sum(1, 2, 3, 4, -5));
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.ueberschreiben_lebewesen;
public class Amoebe {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.ueberschreiben_lebewesen;
public class Dackel {
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.ueberschreiben_lebewesen;
public class Lebewesen {
}

View File

@ -0,0 +1,8 @@
package pr2.vererbung.ueberschreiben_lebewesen;
public class Main {
public static void main(String[] args) {
// TODO: Lebewesen testen
}
}

View File

@ -0,0 +1,5 @@
package pr2.vererbung.vararg_summe;
public class Summator {
}

View File

@ -0,0 +1,24 @@
package pr2.vererbung.vararg_summe.test;
import org.junit.jupiter.api.Test;
import pr2.vererbung.vararg_summe.Summator;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class SummatorTest {
@Test
void testSum() {
// TODO: Einkommentieren
// Summator s = new Summator();
// assertEquals(3, s.sum(1, 2));
// assertEquals(1, s.sum(-1, 2));
// assertEquals(6, s.sum(1, 2, 3));
// assertEquals(0, s.sum(1, 2, -3));
// assertEquals(10, s.sum(1, 2, 3, 4));
// assertEquals(2, s.sum(1, 2, 3, -4));
// assertEquals(15, s.sum(1, 2, 3, 4, 5));
// assertEquals(5, s.sum(1, 2, 3, 4, -5));
// assertEquals(36, s.sum(1, 2, 3, 4, 5, 6, 7, 8));
}
}

View File

@ -0,0 +1,9 @@
package pr2.vererbung.vererbung_geometrie;
/**
* Ein Dreieck.
*/
public class Dreieck {
// TODO: Konstruktor
}

View File

@ -0,0 +1,14 @@
package pr2.vererbung.vererbung_geometrie;
/**
* Basisklasse für geometrische Formen.
*/
public class Figur {
/**
* Fläche der Figur.
*/
private double flaeche;
// TODO: Konstruktoren und Methoden schreiben
}

View File

@ -0,0 +1,14 @@
package pr2.vererbung.vererbung_geometrie;
/**
* Eine Gerade.
*/
public class Gerade {
/**
* Länge der Geraden.
*/
private double laenge;
// TODO: Konstruktor und Methoden
}

View File

@ -0,0 +1,9 @@
package pr2.vererbung.vererbung_geometrie;
/**
* Qudrat.
*/
public class Quadrat extends Rechteck { //*** replace(public class Quadrat {)
// TODO: Konstruktor
}

View File

@ -0,0 +1,9 @@
package pr2.vererbung.vererbung_geometrie;
/**
* Rechteck.
*/
public class Rechteck {
// TODO: Konstruktor
}

View File

@ -0,0 +1,71 @@
package pr2.vererbung.vererbung_geometrie.test;
import org.junit.jupiter.api.Test;
import pr2.vererbung.vererbung_geometrie.Dreieck;
import pr2.vererbung.vererbung_geometrie.Gerade;
import pr2.vererbung.vererbung_geometrie.Quadrat;
import pr2.vererbung.vererbung_geometrie.Rechteck;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Tests für die Figuren.
*/
public class FigurenTest {
private static final double PRECISION = 0.0001;
/**
* Rechteck.
*/
@Test
void testReckteck() {
// TODO: Einkommentieren
// Rechteck r1 = new Rechteck(4.0, 5.0);
// Rechteck r2 = new Rechteck(0.0, 3.0);
// assertEquals(20.0, r1.getFlaeche(), PRECISION);
// assertEquals(0.0, r2.getFlaeche(), PRECISION);
}
/**
* Dreieck.
*/
@Test
void testDreieck() {
// TODO: Einkommentieren
// Dreieck d1 = new Dreieck(6.0, 3.5);
// assertEquals(10.5, d1.getFlaeche(), PRECISION);
}
/**
* Gerade.
*/
@Test
void testGerade() {
// TODO: Einkommentieren
// Gerade g1 = new Gerade(8.0);
// assertEquals(8.0, g1.getLaenge(), PRECISION);
// assertEquals(0.0, g1.getFlaeche(), PRECISION);
//
// g1 = new Gerade(0.0);
// assertEquals(0.0, g1.getLaenge(), PRECISION);
// assertEquals(0.0, g1.getFlaeche(), PRECISION);
}
/**
* Quadrat.
*/
@Test
void testQuadrat() {
// TODO: Einkommentieren
// Quadrat q1 = new Quadrat(3.0);
// assertEquals(9.0, q1.getFlaeche(), PRECISION);
//
// Rechteck r1 = new Rechteck(5.0, 5.0);
// Quadrat q2 = new Quadrat(5.0);
// assertEquals(r1.getFlaeche(), q2.getFlaeche(), PRECISION);
//
// q1 = new Quadrat(0.0);
// assertEquals(0.0, q1.getFlaeche(), PRECISION);
}
}