Update of exercises

pull/1/head
Thomas Smits 2023-04-12 00:28:29 +02:00
parent 5a02699595
commit 4fbaa7d562
45 changed files with 691 additions and 50 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# Final anwenden # Final anwenden
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Figur und Rechteck # Figur und Rechteck
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Figur erweitern # Figur erweitern
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Figur noch einmal erweitern # Figur noch einmal erweitern
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Konstruktoren schreiben # Konstruktoren schreiben
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Polymorphie einsetzen # Polymorphie einsetzen
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Singleton # Singleton
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Statische Methoden und Attribute # Statische Methoden und Attribute
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Methode überladen # Methode überladen
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Methoden überschreiben # Methoden überschreiben
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Varag-Methode schreiben # Varag-Methode schreiben
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -1,6 +1,6 @@
# Vererbung von Figuren # Vererbung von Figuren
📆 **Fällig: 02.04.2023** 📆
## Lernziel ## Lernziel

View File

@ -0,0 +1,27 @@
# Abstrakte Klassen
## Lernziel
Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten.
## Aufgabe
Im Paket [pr2.interfaces.abstrakte_klassen_e](../sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/) finden Sie Klassen, welche geometrische Figuren repräsentieren.
Betrachten Sie die vorhandenen Klassen `Dreieck`, `Kreis` und `Geometer` und finden Sie Gemeinsamkeiten und Unterschiede. Lassen Sie das Programm laufen und notieren Sie sich die Ausgabe.
Führen Sie eine neue _abstrakte_ Klasse `Figur` ein und vereinfachen Sie mit dieser Klasse das vorhandene Programm. Lassen Sie das Programm erneut laufen und vergleichen Sie die Ausgabe mit der vorher notierten.
## 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`.

View File

@ -0,0 +1,30 @@
# Abstrakte Klasse
## Lernziel
Abstrakte Klasse verwenden.
## Aufgabe
Gehen Sie in das Paket [pr2.interfaces.abstrakt_form](../sources/src/main/java/pr2/interfaces/abstrakt_form/).
Schreiben Sie bitte eine abstrakte Klasse `Form` mit den folgenden abstrakten Methoden:
* `flaeche()` liefert die Fläche der Form als Gleitkommazahl mit doppelter Genauigkeit zurück
* `umfang()` liefert den Umfang der Form als Gleitkommazahl mit doppelter Genauigkeit zurück
Fügen Sie außerdem noch zwei Attribute für die x- und y-Position der Form hinzu und schreiben Sie einen entsprechenden Konstruktor. Wählen Sie die Sichtbarkeiten der Attribute so, dass Subklassen sie lesen und schreiben können.
## 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`.

View File

@ -0,0 +1,25 @@
# Comparable implementieren
## Lernziel
Klasse "comparable" machen.
## Aufgabe
Im Paket [pr2.interfaces.comparable_student](../sources/src/main/java/pr2/interfaces/comparable_student/) finden Sie die Klasse `Student`.
Ändern Sie die Klasse bitte so ab, dass sie das `Comparable`-Interface implementiert. Die Sortierfolge soll sein: Nachname, Vorname, Matrikelnummer.
## 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`.

View File

@ -0,0 +1,34 @@
# Interface Stack entwerfen
## Lernziel
Ein Interface entwerfen und dieses dann implementieren.
## Aufgabe
Gehen Sie in das Paket [pr2.interfaces.stack](../sources/src/main/java/pr2/interfaces/stack/).
Entwerfen Sie bitte ein Interface `Stack`, das die grundlegenden Operationen eines Stacks definiert:
* `push` -- schiebt ein neues Objekt auf den Stack
* `pop` -- holt das obere Element vom Stack und gibt es zurück
* `peek` -- gibt das obere Element zurück, lässt es aber auf dem Stack liegen
* `size` -- gibt die Anzahl der Elemente auf dem Stack zurück
Der Stack soll beliebige Objekte verwalten können.
Implementieren Sie das Interface mit einer Klasse `StackImpl` und schreiben Sie JUnit-Tests, um Ihre Implementierung zu testen.
## 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`.

View File

@ -0,0 +1,41 @@
# Interface: Uebersetzer
## Lernziel
Ein Interface implementieren.
## Aufgabe
Im Paket [pr2.interfaces.uebersetzer](../sources/src/main/java/pr2/interfaces/uebersetzer/) finden Sie das Interface `Uebersetzer`, das eine Methode zum Übersetzen von Strings definiert.
Implementieren Sie das Interface für die Sprachen Spanisch (`UebersetzerDeutschSpanisch`) und Englisch (`UebersetzerDeutschEnglisch`) und schreiben Sie eine Klasse `Translator`, die auf der Kommandozeile als erstes Argument die Sprache und als zweites das zu über\-setzende deutsche Wort nimmt und dann auf der Konsole die Übersetzung ausgibt. Es genügt, wenn Sie einige wenige Worte in den Klassen als Übersetzungen vorhalten.
```console
> java Translator englisch gehen
Übersetzung: deutsch -> englisch
gehen -> go
> java Translator spanisch gehen
Übersetzung: deutsch -> spanisch
gehen -> ir
> java Translator deutsch gehen
Unbekannte Sprache
> java Translator spanisch fliegen
Unbekanntes Wort: fliegen
```
## 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`.

View File

@ -0,0 +1,37 @@
# Interfaces anwenden und entwerfen
## Lernziel
Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen.
## Aufgabe
Im Paket [pr2.interfaces.interfaces_e](../sources/src/main/java/pr2/interfaces/interfaces_e/) finden Sie Klassen für einen einfachen Spielecontroller.
Bei dieser Aufgabe geht es um Spielecontroller (Joysticks) und deren Abbildung in einem Programm. Schauen Sie sich das Interface `DigitalController` und die dazugehörige Implementierung `DigitalControllerImpl` an. Führen Sie die passenden Tests aus.
Schreiben Sie nun ein neues Interface `AnalogController` im Paket `api`, das dieselben Methoden wie `DigitalController` hat, mit dem Unterschied, dass die Methoden `up`, `down`, `left` und `right` einen Prozentsatz (Wert zwischen `0.0` und `1.0`) bekommen, der die Auslenkung des Joysticks anzeigt. Die Methode `getPosition` bleibt im Vergleich zum `DigitalController` unverändert. Aus z.B. der Methode `void up()` aus `DigitalController` wird also `void up(double percentage)` in `AnalogController`.
Implementieren Sie das Interface jetzt in einer Klasse `AnalogControllerImpl` im Paket `impl` und testen Sie Ihre Implementierung mit dem Test `AnalogControllerTest`. Damit der Test ausgeführt werden kann, müssen Sie die Tests noch einkommentieren.
__Hinweis:__ Lassen Sie sich bei der Implementierung der Klasse `AnalogControllerImpl` nicht zu sehr von `DigitalControllerImpl` beeinflussen. Sie müssen einen anderen Weg wählen und die Position als `double`-Werte speichern. Eine direkte Verwendung von `Point` wird nicht funktionieren, da `Point` nur ganzzahlige Positionen verwalten kann. Erst in `getPosition` sollten Sie die `double`-Werte runden.
Schreiben Sie nun eine Klasse `DualShock4` im Paket `impl`, die beide Interfaces implementiert. Beachten Sie, dass der Controller zwar zwei Steuerknüppel hat (einen analogen und einen digitalen), aber aus beiden nur eine gemeinsame Position errechnet.
__Hinweis:__ `DualShock4` implementiert zwar die Interfaces, er erbt aber nicht von den Implementierungen. Modellieren Sie die Beziehung zwischen `DualShock4` und `DigitalControllerImpl` bzw. `AnalogControllerImpl` als Assoziation. Leiten Sie dann die Aufrufe der implementierten Methoden an diese Instanzvariablen weiter.
Testen Sie die Implementierung mit dem entsprechenden Test `DualShock4Test`. Auch hier müssen Sie erst die Kommentarzeichen entfernen, bevor der Test laufen kann.
## 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`.

View File

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

View File

@ -0,0 +1,5 @@
package pr2.interfaces.abstrakt_form;
public class Form {
}

View File

@ -0,0 +1,33 @@
package pr2.interfaces.abstrakte_klassen_e;
/**
* Ein Dreieck.
*/
public class Dreieck {
/** Grundseite des Dreiecks. */
private double grundseite;
/** Höhe. */
private double hoehe;
/**
* Erzeugt ein neues Dreieck.
*
* @param grundseite Grundseite.
* @param hoehe Höhe.
*/
public Dreieck(double grundseite, double hoehe) {
this.grundseite = grundseite;
this.hoehe = hoehe;
}
/**
* Berechnet die Fläche.
*
* @return die Fläche.
*/
public double flaeche() {
return grundseite * hoehe / 2;
}
}

View File

@ -0,0 +1,46 @@
package pr2.interfaces.abstrakte_klassen_e;
/**
* Flächenberechnung.
*/
public final class Geometer {
/** Keine Instanzen. */
private Geometer() {
// keine Objekte
}
/**
* Hauptmethode.
*
* @param args Kommandozeilenargumente
*/
public static void main(String[] args) {
Kreis[] kreise = new Kreis[5];
Dreieck[] dreiecke = new Dreieck[5];
kreise[0] = new Kreis(10.0);
kreise[1] = new Kreis(5.5);
kreise[2] = new Kreis(3.3);
kreise[3] = new Kreis(7.2);
kreise[4] = new Kreis(8.0);
dreiecke[0] = new Dreieck(4.0, 3.0);
dreiecke[1] = new Dreieck(2.0, 1.0);
dreiecke[2] = new Dreieck(5.0, 8.0);
dreiecke[3] = new Dreieck(2.0, 7.2);
dreiecke[4] = new Dreieck(14.0, 3.8);
double gesamtflaeche = 0.0;
for (Kreis kreis : kreise) {
gesamtflaeche += kreis.flaeche();
}
for (Dreieck dreieck : dreiecke) {
gesamtflaeche += dreieck.flaeche();
}
System.out.printf("Die Fläche beträgt: %.2f", gesamtflaeche);
}
}

View File

@ -0,0 +1,28 @@
package pr2.interfaces.abstrakte_klassen_e;
/**
* Ein Kreis.
*/
public class Kreis {
/** Radius des Kreises. */
private double radius;
/**
* Legt einen neuen Kreis an.
*
* @param radius Radius des Kreises.
*/
public Kreis(double radius) {
this.radius = radius;
}
/**
* Berechnet die Fläche.
*
* @return die Fläche.
*/
public double flaeche() {
return Math.PI * radius * radius;
}
}

View File

@ -0,0 +1,22 @@
package pr2.interfaces.comparable_student;
public class Student {
private final String vorname;
private final String nachname;
private final int matrikelNr;
public Student(String vorname, String nachname,
int matrikelNr) {
this.vorname = vorname;
this.nachname = nachname;
this.matrikelNr = matrikelNr;
}
@Override
public String toString() {
return String.format("%s, %s (%d)", nachname, vorname,
matrikelNr);
}
}

View File

@ -0,0 +1,36 @@
package pr2.interfaces.interfaces_e.api;
import java.awt.Point;
/**
* Ein digitaler Joystick.
*/
public interface DigitalController {
/**
* Nach oben bewegen.
*/
void up();
/**
* Nach unten bewegen.
*/
void down();
/**
* Nach links bewegen.
*/
void left();
/**
* Nach rechts bewegen.
*/
void right();
/**
* Liefert die aktuelle Position zurück.
*
* @return Die Position.
*/
Point getPosition();
}

View File

@ -0,0 +1,53 @@
package pr2.interfaces.interfaces_e.impl;
import java.awt.Point;
import pr2.interfaces.interfaces_e.api.DigitalController;
/**
* Implementierung eines digitalen Joysticks.
*/
public class DigitalControllerImpl implements DigitalController {
private Point position = new Point(0, 0);
/**
* @see DigitalController#up()
*/
@Override
public void up() {
position.translate(0, -1);
}
/**
* @see DigitalController#down()
*/
@Override
public void down() {
position.translate(0, 1);
}
/**
* @see DigitalController#left()
*/
@Override
public void left() {
position.translate(-1, 0);
}
/**
* @see DigitalController#right()
*/
@Override
public void right() {
position.translate(1, 0);
}
/**
* @see DigitalController#getPosition()
*/
@Override
public Point getPosition() {
return (Point) position.clone();
}
}

View File

@ -0,0 +1,53 @@
package pr2.interfaces.interfaces_e.test;
//import org.junit.jupiter.api.Test;
//import tpe.vererbung.interfaces.api.AnalogController;
//import tpe.vererbung.interfaces.chinesen.AnalogControllerImpl;
/**
* Tests für einen analogen Joystick.
*/
public class AnalogControllerTest extends DigitalControllerTest {
//
// /**
// * Testet einen anlogen Controller.
// */
// @Test
// void testAnalogController() {
// AnalogController c = new AnalogControllerImpl();
// testAnalogController(c);
// }
//
// /**
// * Interne Hilfsmethode zum Test von analogen Controllern.
// *
// * @param c Controller, der getestet wird
// */
// protected void testAnalogController(AnalogController c) {
// c.up(0.5);
// assertPointEquals(0, 0, c.getPosition());
// c.up(0.5);
// assertPointEquals(0, -1, c.getPosition());
//
// c.left(0.3);
// c.left(0.3);
// c.left(0.3);
// assertPointEquals(0, -1, c.getPosition());
// c.left(0.2);
// assertPointEquals(-1, -1, c.getPosition());
//
// c.down(1.0);
// assertPointEquals(-1, 0, c.getPosition());
//
// c.down(1.0);
// assertPointEquals(-1, 1, c.getPosition());
// c.down(1.0);
// assertPointEquals(-1, 2, c.getPosition());
//
// c.right(0.5);
// c.right(0.5);
// c.right(0.5);
// assertPointEquals(0, 2, c.getPosition());
// }
}

View File

@ -0,0 +1,63 @@
package pr2.interfaces.interfaces_e.test;
import java.awt.Point;
import org.junit.jupiter.api.Test;
//
//import org.junit.jupiter.api.Test;
import pr2.interfaces.interfaces_e.impl.DigitalControllerImpl;
import pr2.interfaces.interfaces_e.api.DigitalController;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Tests für einen digitalen Joystick.
*/
public class DigitalControllerTest {
/**
* Testet einen digitalen Controller.
*/
@Test
void testDigitalController() {
DigitalController c = new DigitalControllerImpl();
testDigitalController(c);
}
/**
* Interne Hilfsmethode zum Test von digitalen Controllern.
*
* @param c Controller, der getestet wird
*/
protected void testDigitalController(DigitalController c) {
assertPointEquals(0, 0, c.getPosition());
c.up();
c.up();
assertPointEquals(0, -2, c.getPosition());
c.down();
c.down();
assertPointEquals(0, 0, c.getPosition());
c.left();
c.right();
assertPointEquals(0, 0, c.getPosition());
c.left();
assertPointEquals(-1, 0, c.getPosition());
c.left();
assertPointEquals(-2, 0, c.getPosition());
c.right();
c.right();
c.right();
assertPointEquals(1, 0, c.getPosition());
}
/**
* Interne Hilfsmethode, um einen Punkt mit seinem x und
* y-Wert zu vergleichen.
*
* @param x x-Wert
* @param y y-Wert
* @param point Punkt, der verglichen werden soll
*/
protected void assertPointEquals(int x, int y, Point point) {
assertEquals(new Point(x, y), point);
}
}

View File

@ -0,0 +1,43 @@
package pr2.interfaces.interfaces_e.test;
//import org.junit.jupiter.api.Test;
//import pr2.interfaces.interfaces_e.api.DigitalController;
/**
* Tests für einen analogen Joystick.
*/
public class DualShock4Test extends AnalogControllerTest {
//
// /**
// * Testet einen DualShock4 Kombi-Controller.
// */
// @Test
// void testDualShock4() {
// DigitalController cd = new DualShock4();
// testDigitalController(cd);
//
// AnalogController ca = new DualShock4();
// testAnalogController(ca);
//
// DualShock4 ds = new DualShock4();
//
// ds.up();
// ds.up(1.0);
// assertPointEquals(0, -2, ds.getPosition());
//
// ds.left();
// ds.right();
// ds.right(0.5);
// ds.right(0.5);
// assertPointEquals(1, -2, ds.getPosition());
//
// ds.down();
// ds.down();
// ds.down(0.3);
// ds.down(0.3);
// ds.down(0.3);
// ds.down(0.1);
// assertPointEquals(1, 1, ds.getPosition());
// }
}

View File

@ -0,0 +1,5 @@
package pr2.interfaces.stack;
public interface Stack {
}

View File

@ -0,0 +1,5 @@
package pr2.interfaces.stack;
public class StackImpl {
}

View File

@ -0,0 +1,36 @@
package pr2.interfaces.stack.test;
import org.junit.jupiter.api.Test;
import pr2.interfaces.stack.Stack;
import pr2.interfaces.stack.StackImpl;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class StackTest {
@Test
void testStack() {
// TODO: Einkommentieren
// Stack s = new StackImpl(100);
//
// assertEquals(0, s.size());
//
// s.push("Hallo");
// s.push("wie");
// s.push("gehts");
//
// assertEquals(3, s.size());
//
// assertEquals("gehts", s.peek());
// assertEquals("gehts", s.pop());
//
// assertEquals("wie", s.peek());
// assertEquals("wie", s.pop());
//
// assertEquals("Hallo", s.peek());
// assertEquals("Hallo", s.pop());
//
// assertNull(s.pop());
}
}

View File

@ -0,0 +1,13 @@
package pr2.interfaces.uebersetzer;
public interface Uebersetzer {
/**
* Übersetzt den gegebeben String.
*
* @param string String, der übersetzt werden soll
* @return die Übersetzung oder {@literal null}, wenn das Wort nicht
* bekannt ist
*/
public String uebersetze(String string);
}