# Zahlen zur Basis 4
**đ Benotetes Assignment đ**
đ **FĂ€llig: 07.04.2026** đ
Zum Gedenken an Chuck Norris gehen Sie heute mal wieder ins Kino und schauen sich Missing in Action an. So richtig gut ist der Film nicht gealtert, aber es ist eben ein Klassiker und ordentlich Action gibt es auch.
Als Sie aus dem Kino herauskommen, ist auf der StraĂe ganz viel Aufruhr und die Menschen laufen wild durcheinander. Sie fragen eine flĂŒchtende Person, was denn passiert ist, und bekommen als Antwort âdie Aliens sind da, die Aliens sind daâ.
Ihr Blick fĂ€llt auf das Hochhaus der Technischen Hochschule und tatsĂ€chlich beschieĂt gerade ein Alien-Raumschiff das schöne neue Logo der TH oben am GebĂ€ude. Mögen die AuĂerirdischen die Farbe etwa nicht? Was haben die gegen die TH?
Sie machen sich auf den Weg nach Hause, um sich im Keller vor den AuĂerirdischen zu verstecken. Kurz vor der HaustĂŒr spĂŒren Sie ein seltsames Kribbeln und fĂŒhlen sich plötzlich schwerelos. Sie heben vom Boden ab, Ihr Blick geht nach oben und da ist ein weiteres Alien-Raumschiff, das Sie mit einem Traktorstrahl ansaugt. Verdammt, Sie wissen aus dem Kino, was jetzt kommen wird: Entweder machen die Aliens mit Ihnen seltsame Versuche oder sie wollen Ihr Hirn aussaugen. In Gedanken verabschieden Sie sich von dieser Welt und Ă€rgern sich, dass Sie nicht mehr Party gemacht haben, anstatt zu studieren.
Im Raumschiff angekommen steht Ihnen plötzlich ein Alien gegenĂŒber, spricht Sie in bestem Hochdeutsch an und stellt sich als ášááźáčá
ááá, oder kurz áá, vor. áá erklĂ€rt die Situation: Auf dem Planeten der AuĂerirdischen hat man nach der Erfindung der kĂŒnstlichen Intelligenz alle Informatiker:innen entlassen und sich ganz auf die Programme aus der KI verlassen. Die KI hat extrem viele SicherheitslĂŒcken in die Software eingebaut, die man aber ohne Expert:innen nicht entdecken konnte. Hacker vom Nachbarplaneten haben diese SicherheitslĂŒcken genutzt, um einen IPDoS-Angriff zu fahren (Interplanetary Denial of Service). Jetzt ist die Zivilisation vollkommen am Ende und die Aliens entfĂŒhren Wesen von anderen Planeten, die programmieren können.
âAusgerechnet mich?â, rufen Sie, âIch bin erst im 2. Semester und habe noch nicht einmal Programmieren 2 bestanden.â
âDas ist kein Problemâ, erklĂ€rt Ihnen áá, âes geht um eine ganz einfache Aufgabe. Wir bauen unsere Systeme komplett neu auf. Als Erstes brauchen wir eine Darstellung unserer Zahlen.â
âNehmt doch einfach Java und den Datentyp `long`â, entgegnen Sie, ganz Stolz auf Ihre Kenntnisse aus Programmieren 1.
âJava ist schon ganz knorke wegen der plattformunabhĂ€ngigkeit, aber mit `long` können wir wirklich nichts anfangen, wir haben nur vier Finger und arbeiten deshalb weder binĂ€r noch zur Basis 10, sondern zur Basis 4â, erklĂ€rt das Alien.
âWir beamen dich auch wieder herunter, wenn du das Programm fertig hast, versprochen.â Dabei schaut es irgendwie hungrig und gierig auf Ihren Kopf und fummelt mit einem groĂen, metallenen Strohhalm und einem Hammer herum. Und warum kreuzt es gerade die Finger?
Ihnen bleibt aber nichts anderes ĂŒbrig, als sich in die Arbeit zu stĂŒrzen...
## Paket
Gehen Sie in das Paket [pr2.strukturierung.quaternary](../sources/src/main/java/pr2/strukturierung/quaternary/).
## Implementierung
Schreiben Sie eine Klasse `QuaternaryNumber`, welche Zaheln zur Basis vier (4) darstellen kann. In diesem System zÀhlt man wie folgt: `0`, `1`, `2`, `3`, `10`, `11`, `12`, `13`, `20`, `21`, `22`, `23`, ...
Die Klasse hat folgende Eigenschaften:
* Die Objekte der Klasse sind _unverÀnderlich (immutable)_, d.h. die Daten eines Objekts können nach der Erzeugung nicht mehr verÀndert werden.
* Beim Erzeugen neuer Objekte (Konstruktor) gibt der/die Benutzer:in den Wert entweder
* als `long`- Wert (zur Basis 10) oder
* als `String` zur Basis 4. D.h. `new QuaternaryNumber(4)` und `new QuaternaryNumber("10")` ergeben denselben Wert. FĂŒhrende Nullen werden ignoriert.
* Die Klasse kann positive und negative Zahlen verwalten.
* Die Klasse bietet elementare arithmetische Operationen an, die weiter unten beschrieben werden.
Intern werden die Zahlen in einem Array vom Typ `byte[]` gespeichert, wobei jedes Element einer Ziffer aus dem System entspricht, also die Werte `0`, `1`, `2` und `3` annehmen kann. Die interne Speicherung erfolgt mit der niedrigst-wertigen Stelle zuerst.
Die Klasse soll von der Klasse `java.lang.Number` abgeleitet werden.
Implementieren Sie bitte die folgenden Methoden in der Klasse `QuaternaryNumber`:
* Anlegen einer neuen Zahl und BefĂŒllen mit entsprechenden Werten. Die Zahl kann sowohl in der oben beschriebenen Form entweder als `String` oder als `long`-Wert angelegt werden.
* Anlegen einer neuen Zahl aus einer vorhandenen Zahl (*Copy Constructor*)
* Addieren zweier `QuaternaryNumber` (`add`) oder einer `QuaternaryNumber` und eines `long`-Wertes (`add`).
* Subtrahieren zweier `QuaternaryNumber` (`sub`) oder einer `QuaternaryNumber` und eines `long`-Wertes (`sub`).
* Multiplizieren zweier `QuaternaryNumber` (`mul`) oder einer `QuaternaryNumber` und eines `long`-Wertes (`mul`).
* Dividieren zweier `QuaternaryNumber` (`div`) oder einer `QuaternaryNumber` und eines `long`-Wertes (`div`).
* Berechnen des ganzzahligen Divisionsrestes zweier `QuaternaryNumber` (`remainder`) oder einer `QuaternaryNumber` und eines `long`-Wertes (`remainder`).
* Auslesen des Wertes
* als `int` (`intValue`),
* als `long`-Wert (`longValue`),
* als `float` (`floatValue`),
* als `double`-Wert (`doubleValue`),
* als `String` (`toString`).
* Vergleich zweier Zahlen auf Gleichheit (`equals`).
**Abgabe**: Source-Code der Klasse `QuaternaryNumber`.
## Tests
ĂberprĂŒfen Sie die FunktionalitĂ€t Ihrer Implementierung mit entsprechenden JUnit-Tests und weisen Sie mit diesen Tests nach, dass die implementierten Operationen richtig funktionieren. Testen Sie alle Methoden und Konstruktoren. Denken Sie an mögliche RandfĂ€lle (Ăberlauf / Unterlauf etc.)
**Abgabe**: Source-Code der Tests als `QuaternaryNumberTest`.
## Abgabe
Alle Abgaben fĂŒr die Vorlesung erfolgen ĂŒber `git` und das Ihnen zugeordnete Repository.
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.
4. Wenn Sie Meldung "â
Projekt gebaut" bekommen, checken Sie Ihre Ănderungen in `git` **auf der Kommandozeile** ein (comitten), d.h. mit `git add` und `git commit`. Verwenden Sie **nicht** Eclipse fĂŒr diesen Schritt.
5. Rufen Sie mit `bin/submit.sh` erneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "â
Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen.
6. ĂberprĂŒfen Sie ĂŒber das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.