From cfba0106a9b2ca8ed038df3a59b19d5ad3d841d8 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 3 Jun 2022 14:23:51 +0200 Subject: [PATCH] Refacotr code for AB8 --- angabe/Aufgabenblatt1.md | 16 +++--- angabe/Aufgabenblatt2.md | 22 ++++---- angabe/Aufgabenblatt4.md | 20 +++---- angabe/Aufgabenblatt5.md | 4 +- angabe/Aufgabenblatt6.md | 34 ++++++------ angabe/Aufgabenblatt8.md | 116 +++++++++++++++++++-------------------- src/Aufgabe8Test.java | 100 ++++++++------------------------- src/ReadDataUtil.java | 43 +++++++-------- src/Simulation8.java | 44 ++++++--------- src/Simulation9.java | 5 +- 10 files changed, 170 insertions(+), 234 deletions(-) diff --git a/angabe/Aufgabenblatt1.md b/angabe/Aufgabenblatt1.md index d83b17d..6162491 100644 --- a/angabe/Aufgabenblatt1.md +++ b/angabe/Aufgabenblatt1.md @@ -10,32 +10,32 @@ Diese Aufgabenstellung ist ein vollständiges IntelliJ-Projekt, das Sie bereits - Einstellen des _Project SDK_: Öffnen Sie dazu in IntelliJ die Projekteinstellungen (_File_ -> _Project Structure..._) und wählen Sie ein JDK unter _Project | Project SDK_ aus. -## Thema -Das allgemeine Thema dieses und der kommenden Aufgabenblätter ist der Weltraum und die Simulation der physikalischen Gesetze, die für Himmelskörper gelten. Obwohl ein möglichst exaktes physikalisches Modell wünschenswert ist, ist bei der Implementierung die Genauigkeit der physikalischen Modelle sekundär. Konzeptuelle Fehler bei den physikalischen Berechnungen spielen keine Rolle bei der Bewertung. Schwerpunkt sind die Konzepte der Programmiersprache. +## Thema +Das allgemeine Thema dieses und der kommenden Aufgabenblätter ist der Weltraum und die Simulation der physikalischen Gesetze, die für Himmelskörper gelten. Obwohl ein möglichst exaktes physikalisches Modell wünschenswert ist, ist bei der Implementierung die Genauigkeit der physikalischen Modelle sekundär. Konzeptuelle Fehler bei den physikalischen Berechnungen spielen keine Rolle bei der Bewertung. Schwerpunkt sind die Konzepte der Programmiersprache. ## Ziel Ziel der Aufgabe ist die Anwendung der Konzepte: Objekt- vs. Klassenmethode, Datensatz, Data Hiding, Konstruktoren (siehe Skriptum Seiten 31-50). ## Aufgaben -1. Lesen Sie sich die Kommentare in den Dateien durch und führen Sie die Klasse `Simulation` aus. -2. Data hiding: +1. Lesen Sie sich die Kommentare in den Dateien durch und führen Sie die Klasse `Simulation` aus. +2. Data hiding: 1. Machen Sie in den Klassen `Vector3` und `Body` alle Objektvariablen `private`. 2. Definieren Sie entsprechende Konstruktoren, um die Objektvariablen zu initialisieren. `Simulation` soll nur noch diese nutzen und nicht mehr direkt auf die Objektvariablen zugreifen dürfen. Testen Sie zunächst die vervollständigten Klassen `Vector3` und `Body` mit der Klasse `Aufgabe1Test`. Entfernen Sie dazu die Kommentarzeichen in der Klassendefinition. -3. Datenkapselung: Anstelle der gegebenen statischen Methoden in der Datei `Simulation.java` sollen nur noch entsprechende Objektmethoden der Klassen `Body` und `Vector3` benutzt werden. (Ausnahme ist die Methode `main`. Die statischen Methoden der Klasse `SpaceDraw` müssen auch nicht verändert werden.) Implementieren Sie dazu die spezifizierten Methoden und bauen Sie `Simulation` so um, dass anstelle der Aufrufe statischer Methoden Objektmethoden genutzt werden. Sie sollen alle in `Body` und `Vector3` spezifizierten Methoden implementieren, auch wenn nicht alle von `Simulation` genutzt werden. Die in `Simulation.java` gegebenen statischen Methoden können dann entfernt werden (natürlich bis auf die erwähnten Ausnahmen). Nutzen Sie die implementierten Methoden auch in `Simulation.java`, um die Himmelskörper zu bewegen und zu zeichnen. +3. Datenkapselung: Anstelle der gegebenen statischen Methoden in der Datei `Simulation.java` sollen nur noch entsprechende Objektmethoden der Klassen `Body` und `Vector3` benutzt werden. (Ausnahme ist die Methode `main`. Die statischen Methoden der Klasse `SpaceDraw` müssen auch nicht verändert werden.) Implementieren Sie dazu die spezifizierten Methoden und bauen Sie `Simulation` so um, dass anstelle der Aufrufe statischer Methoden Objektmethoden genutzt werden. Sie sollen alle in `Body` und `Vector3` spezifizierten Methoden implementieren, auch wenn nicht alle von `Simulation` genutzt werden. Die in `Simulation.java` gegebenen statischen Methoden können dann entfernt werden (natürlich bis auf die erwähnten Ausnahmen). Nutzen Sie die implementierten Methoden auch in `Simulation.java`, um die Himmelskörper zu bewegen und zu zeichnen. ## Zusatzfragen Beantworten Sie folgende Zusatzfragen als Kommentar in `Simulation.java`: -1. Was versteht man unter _Datenkapselung_? Geben Sie ein Beispiel, wo dieses Konzept in dieser Aufgabenstellung angewendet wird. +1. Was versteht man unter _Datenkapselung_? Geben Sie ein Beispiel, wo dieses Konzept in dieser Aufgabenstellung angewendet wird. 2. Was versteht man unter _Data Hiding_? Geben Sie ein Beispiel, wo dieses Konzept in dieser Aufgabenstellung angewendet wird. -3. Was steht bei einem Methodenaufruf links vom `.` (z.B. bei `SpaceDraw.massToColor(1e30)` oder +3. Was steht bei einem Methodenaufruf links vom `.` (z.B. bei `SpaceDraw.massToColor(1e30)` oder `body.radius()`)? Woran erkennt man dabei Objektmethoden? ### Denkanstöße (ohne Bewertung) Folgende Fragen sind als Denkanstöße gedacht und bilden die Grundlage für eine Diskussion in der Übungseinheit zu diesem Aufgabenblatt. 1. Welche anderen oder weiteren Objektmethoden hätten Sie zur Verfügung gestellt, wenn es keine Vorgaben gegeben hätte? -2. Wann wäre es sinnvoll, die Klasse `SpaceDraw` so zu ändern, dass diese ebenfalls Objektmethoden +2. Wann wäre es sinnvoll, die Klasse `SpaceDraw` so zu ändern, dass diese ebenfalls Objektmethoden zur Verfügung stellt? #### _Punkteaufteilung_ diff --git a/angabe/Aufgabenblatt2.md b/angabe/Aufgabenblatt2.md index 7c9349f..ddc9e50 100644 --- a/angabe/Aufgabenblatt2.md +++ b/angabe/Aufgabenblatt2.md @@ -1,7 +1,7 @@ # Aufgabenblatt 2 ## Allgemeine Anmerkungen -Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 28.3. 11h durch `git commit` und `push` +Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 28.3. 11h durch `git commit` und `push` abzugeben. Mit der Angabe werden folgende Dateien mitgeliefert: `BodyQueue.java`, `BodyForceMap.java` und `Aufgabe2Test.java`. Diese Klassen dürfen nur an den Stellen verändert werden, die mit `TODO` markiert sind. Zusätzliche Klassen, Interfaces, Methoden und Variablen dürfen aber eingefügt werden. Wenn Sie zusätzlich zu den gefragten Klassen, weitere Klassen definieren, achten Sie darauf, dass die Klassennamen mit `My` beginnen, um Konflikte mit späteren Aufgabenblättern zu vermeiden. ## Ziel @@ -10,10 +10,10 @@ Ziel der Aufgabe ist die Implementierung einer linearen und einer assoziativen D ## Beschreibung der gegebenen Dateien - `BodyQueue` ist das Gerüst für eine Implementierung einer linearen Datenstruktur zur Verwaltung von Objekten des Typs `Body`. -- `BodyForceMap` ist das Gerüst für eine Implementierung einer assoziativen Datenstruktur, die +- `BodyForceMap` ist das Gerüst für eine Implementierung einer assoziativen Datenstruktur, die einen Himmelskörper mit der auf ihn wirkenden Kraft assoziiert. -- `Aufgabe2Test` ist eine vorgegebene Klasse, die Sie zum Testen Ihrer Implementierung verwenden -sollten. Bei einer fehlerfreien Implementierung sollten bei der Ausführung dieser Klasse keine Exceptions geworfen werden und alle Tests als erfolgreich ("successful") ausgegeben werden. Sie müssen diese Klasse nicht verändern, können aber eigene Testfälle hinzufügen. +- `Aufgabe2Test` ist eine vorgegebene Klasse, die Sie zum Testen Ihrer Implementierung verwenden +sollten. Bei einer fehlerfreien Implementierung sollten bei der Ausführung dieser Klasse keine Exceptions geworfen werden und alle Tests als erfolgreich ("successful") ausgegeben werden. Sie müssen diese Klasse nicht verändern, können aber eigene Testfälle hinzufügen. ## Aufgaben @@ -27,10 +27,10 @@ Ihre Aufgaben sind folgende: Body[] keys; // assume descending order according to mass Body toInsert; ... - + int left = 0; int right = size - 1; - + while (left <= right) { int middle = left + ((right - left) / 2); if (keys[middle].mass() < toInsert.mass()) { @@ -39,14 +39,14 @@ Ihre Aufgaben sind folgende: left = middle + 1; } } - + // index where to insert: right + 1 ``` 4. Bauen Sie die bereits bestehende Klasse `Simulation` so um, dass keine Kollisionen von Himmelskörpern mehr berücksichtigt werden. Dadurch soll der Programmcode vereinfacht werden. Die Anzahl der Himmelskörper ändert sich im Laufe der Simulation somit nicht. Testen Sie die Simulation. -5. Ändern Sie nun die Klasse `Simulation` so, dass zur Verwaltung der Himmelskörper anstelle des Arrays Objekte der Klassen `BodyQueue` und `BodyForceMap` verwendet werden. Das heißt beispielsweise, dass die Zugriffe auf die Himmelskörper der Simulation über Methoden von `BodyQueue` erfolgen müssen. Anstelle des Arrays `forceOnBody` soll ein Objekt des Typs `BodyForceMap` benutzt werden. +5. Ändern Sie nun die Klasse `Simulation` so, dass zur Verwaltung der Himmelskörper anstelle des Arrays Objekte der Klassen `BodyQueue` und `BodyForceMap` verwendet werden. Das heißt beispielsweise, dass die Zugriffe auf die Himmelskörper der Simulation über Methoden von `BodyQueue` erfolgen müssen. Anstelle des Arrays `forceOnBody` soll ein Objekt des Typs `BodyForceMap` benutzt werden. 6. Testen Sie die Simulation wieder. Das Verhalten der Simulation sollte unverändert sein. Je nach Implementierung der Klassen `BodyQueue` und `BodyForceMap` ist es möglich (und kein Problem), dass die Simulation jetzt langsamer läuft, als nach dem Umbau in Schritt 4. -7. (Freiwillige Zusatzaufgabe ohne Bewertung:) Testen Sie die Simulation mit den folgenden fünf -Himmelskörpern: +7. (Freiwillige Zusatzaufgabe ohne Bewertung:) Testen Sie die Simulation mit den folgenden fünf +Himmelskörpern: ``` Body sun = new Body(1.989e30,new Vector3(0,0,0),new Vector3(0,0,0)); Body earth = new Body(5.972e24,new Vector3(-1.394555e11,5.103346e10,0),new Vector3(-10308.53,-28169.38,0)); @@ -60,4 +60,4 @@ Himmelskörpern: - Implementierung von `BodyQueue`: 2 Punkte - Implementierung von `BodyForceMap`: 2 Punkte - Anpassung von `Simulation`: 1 Punkt -- Gesamt: 5 Punkte +- Gesamt: 5 Punkte diff --git a/angabe/Aufgabenblatt4.md b/angabe/Aufgabenblatt4.md index cab37fe..9e2d63a 100644 --- a/angabe/Aufgabenblatt4.md +++ b/angabe/Aufgabenblatt4.md @@ -2,15 +2,15 @@ ## Allgemeine Anmerkungen Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 2.5. 11h durch `git commit` und `push` -abzugeben. Mit der Angabe werden die Dateien `CosmicSystem.java`, `Drawable.java`, -`NamedBodyForcePair.java`, `HierarchicalSystem.java`, `Simulation4.java` und `Aufgabe4Test.java` +abzugeben. Mit der Angabe werden die Dateien `CosmicSystem.java`, `Drawable.java`, +`NamedBodyForcePair.java`, `HierarchicalSystem.java`, `Simulation4.java` und `Aufgabe4Test.java` mitgeliefert. Wenn Sie zusätzlich zu den gefragten Klassen weitere Klassen definieren, achten Sie darauf, dass die Klassennamen mit `My` beginnen, um Konflikte mit späteren Aufgabenblättern zu vermeiden. ## Ziel -Ziel der Aufgabe ist die Anwendung der Konzepte: Interfaces, dynamisches Binden, toString() +Ziel der Aufgabe ist die Anwendung der Konzepte: Interfaces, dynamisches Binden, toString() (siehe Skriptum Seite 75-84). ## Beschreibung der gegebenen Dateien @@ -20,7 +20,7 @@ Ziel der Aufgabe ist die Anwendung der Konzepte: Interfaces, dynamisches Binden, Hierarchie von Systemen und Subsystemen beschreiben. Unser Sonnensystem ist ein Beispiel eines Systems, das mehrere Teilsysteme beinhaltet. Ein solches Teilsystem ist beispielsweise das System Erde und Erdmond. Ein anderes Teilsystem wäre Jupiter mit seinen Monden. Verändern Sie dieses Interface nicht. -- [Drawable](../src/Drawable.java) wird von `CosmicSystem` verwendet. Verändern Sie dieses Interface +- [Drawable](../src/Drawable.java) wird von `CosmicSystem` verwendet. Verändern Sie dieses Interface nicht. - [NamedBodyForcePair](../src/NamedBodyForcePair.java) ist das Gerüst für eine Klassendefinition. Die Klasse implementiert `CosmicSystem` und repräsentiert einen einzelnen benannten Himmelskörper @@ -34,8 +34,8 @@ die Simulation analog zur Klasse `Simulation` implementiert werden (damit Sie Ih Datei](../src/Simulation.java) nicht überschreiben müssen). - [Aufgabe4Test](../src/Aufgabe4Test.java) ist eine vorgegebene Klasse, die Sie zum Testen Ihrer Implementierung verwenden sollten. Bei einer fehlerfreien Implementierung sollten bei der -Ausführung dieser Klasse keine Exceptions geworfen werden und alle Tests als erfolgreich ("successful") -ausgegeben werden. Entfernen Sie die Kommentarzeichen, um diese Klasse verwenden zu können. Sie +Ausführung dieser Klasse keine Exceptions geworfen werden und alle Tests als erfolgreich ("successful") +ausgegeben werden. Entfernen Sie die Kommentarzeichen, um diese Klasse verwenden zu können. Sie müssen diese Klasse nicht weiter verändern, können aber eigene Testfälle hinzufügen. ## Aufgaben @@ -45,7 +45,7 @@ Ihre Aufgaben sind folgende: **1. Implementierung von `CosmicSystem` in `NamedBodyForcePair`:** Fügen Sie in der Klasse `Body` eine öffentliche Methode `massCenter()` hinzu, die die Position des Himmelskörpers liefert. - Definieren Sie die Klasse `NamedBodyForcePair` so, dass sie das Interface `CosmicSystem` + Definieren Sie die Klasse `NamedBodyForcePair` so, dass sie das Interface `CosmicSystem` implementiert. Die Methoden `getMass()` und `getMassCenter()` geben lediglich die Masse bzw. Position des Himmelskörpers zurück. @@ -84,14 +84,14 @@ Kraft, indem alle Kräfte die von Körpern aus `this` auf das `NamedBodyForcePai ausgeübt werden, zur Kraft im Objekt hinzuaddiert werden. Beispiel: Die Anweisung `cs.addForce(cs)` aktualisiert alle wechselseitigen im System `cs` wirkenden Kräfte. -- `update()` führt auf Basis der gespeicherten Kräfte alle Bewegungen im System `this` durch und +- `update()` führt auf Basis der gespeicherten Kräfte alle Bewegungen im System `this` durch und setzt danach alle Kräfte wieder auf den null-Vektor zurück. - `getBodies()` liefert eine Liste (Typ: `BodyLinkedList`) mit allen Himmelskörpern aus `this`. **3. Implementierung von `Simulation4`:** -Implementieren Sie die Simulationsschleife unter Verwendung eines Objekts vom Typ +Implementieren Sie die Simulationsschleife unter Verwendung eines Objekts vom Typ `HierachicalSystem`. Alle Berechnungen sollen mittels Methoden von `CosmicSystem` durchgeführt werden. @@ -110,7 +110,7 @@ die einzelnen Körper in `cs` dadurch erreicht werden, dass `this` für alle sei und Untersysteme `addForceTo(cs)` aufruft. Wird beim rekursiven Abstieg ein einzelner Himmelskörper erreicht (Blattknoten) ruft dieser `cs.addForceFrom(this)` auf. -- Achten Sie bei der Berechnung der Kräfte in `addForceFrom(Body b)` darauf, dass die Kraft nicht +- Achten Sie bei der Berechnung der Kräfte in `addForceFrom(Body b)` darauf, dass die Kraft nicht verändert wird, wenn `this` und `b` derselbe Himmelskörper sind. #### _Punkteaufteilung_ diff --git a/angabe/Aufgabenblatt5.md b/angabe/Aufgabenblatt5.md index 10c005e..a78d8ce 100644 --- a/angabe/Aufgabenblatt5.md +++ b/angabe/Aufgabenblatt5.md @@ -58,7 +58,7 @@ Ihre Aufgaben sind folgende: **3. Vervollständigen von `MassiveLinkedList`:** Definieren Sie `MassiveLinkedList`. Die Klasse ist wie `BodyLinkedList` aufgebaut, mit dem - Unterschied, dass der Elementtyp statt `Body` nun der Typ `Massive` ist. Die Methode `indexOf` + Unterschied, dass der Elementtyp statt `Body` nun der Typ `Massive` ist. Die Methode `indexOf` vergleicht Objekte mittels `equals`. **4. Implementierung von `MassiveForceHashMap`:** @@ -98,5 +98,5 @@ Ihre Aufgaben sind folgende: - Implementierung von `MassiveForceHashMap`: 2 Punkte - Implementierung von `MassiveLinkedList`: 0.5 Punkte - Implementierung von `Simulation5`: 1 Punkte - + - Gesamt: 5 Punkte diff --git a/angabe/Aufgabenblatt6.md b/angabe/Aufgabenblatt6.md index 249ac6d..1bd08f7 100644 --- a/angabe/Aufgabenblatt6.md +++ b/angabe/Aufgabenblatt6.md @@ -3,8 +3,8 @@ ## Allgemeine Anmerkungen Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 23.5. 11h durch `git commit` und `git push` -abzugeben. Mit der Angabe werden die Dateien `MassiveIterable.java`, `MassiveIterator.java`, -`MassiveSet.java`, `MassiveForceTreeMap.java`, `Simulation6.java` und `Aufgabe6Test.java` +abzugeben. Mit der Angabe werden die Dateien `MassiveIterable.java`, `MassiveIterator.java`, +`MassiveSet.java`, `MassiveForceTreeMap.java`, `Simulation6.java` und `Aufgabe6Test.java` mitgeliefert. Wenn Sie zusätzlich zu den gefragten Klassen weitere Klassen definieren, achten Sie darauf, dass @@ -21,7 +21,7 @@ Ziel der Aufgabe ist die Anwendung der Konzepte: Iterator, Kopie vs. Sichtweise, Elementen vom Typ `Massive` spezifiziert. Verändern Sie diese Datei bitte nicht. - [MassiveIterator](../src/MassiveIterator.java) ist ein Interface, das einen Iterator über Elemente vom Typ `Massive` spezifiziert. Verändern Sie diese Datei bitte nicht. -- [MassiveSet](../src/MassiveSet.java) ist ein Interface, das iterierbare Mengen mit +- [MassiveSet](../src/MassiveSet.java) ist ein Interface, das iterierbare Mengen mit `Massive`-Elementen spezifiziert. Verändern Sie diese Datei bitte nicht. - [MassiveForceTreeMap](../src/MassiveForceTreeMap.java) ist das Gerüst für eine Implementierung einer assoziativen Datenstruktur, die ein `Massive`-Objekt mit der auf das Objekt wirkenden Kraft @@ -41,25 +41,25 @@ Ihre Aufgaben sind folgende: **1. Implementieren Sie die Klasse `MassiveForceTreeMap`.** - Implementieren Sie die Klasse `MassiveForceTreeMap`. `MassiveForceTreeMap` ist wie - `BodyForceTreeMap` aufgebaut, mit dem Unterschied, dass der Typ des Schlüssels statt `Body` nun - der Typ `Massive` ist. Weiters soll die Klasse Methode `getKeys()` zur Verfügung stellen, - die eine `MassiveSet`-Sichtweise auf die Menge der Schlüssel liefert. Änderungen an dem - zurückgelieferten `MassiveSet`-Objekt wirken sich auf das zugrunde - liegende `MassiveForceTreeMap`-Objekt aus. Die Methode `toList()` liefert dagegen eine - unabhängige Liste (Kopie) mit allen Schlüsseln der Map. Für die Implementierung von - `MassiveSet` können Sie einen eigenen Klassennamen beginnend mit `My` wählen. Die Definition kann + Implementieren Sie die Klasse `MassiveForceTreeMap`. `MassiveForceTreeMap` ist wie + `BodyForceTreeMap` aufgebaut, mit dem Unterschied, dass der Typ des Schlüssels statt `Body` nun + der Typ `Massive` ist. Weiters soll die Klasse Methode `getKeys()` zur Verfügung stellen, + die eine `MassiveSet`-Sichtweise auf die Menge der Schlüssel liefert. Änderungen an dem + zurückgelieferten `MassiveSet`-Objekt wirken sich auf das zugrunde + liegende `MassiveForceTreeMap`-Objekt aus. Die Methode `toList()` liefert dagegen eine + unabhängige Liste (Kopie) mit allen Schlüsseln der Map. Für die Implementierung von + `MassiveSet` können Sie einen eigenen Klassennamen beginnend mit `My` wählen. Die Definition kann in einer eigenen Datei oder in der Datei `MassiveForceTreeMap.java` erfolgen. - + **2. Adaptieren Sie die Klasse `HierarchicalSystem`:** - Die Klasse `HierarchicalSystem` soll so geändert werden, dass sie das gegebene - Interface `MassiveIterable` implementiert. Die Reihenfolge der vom Iterator gelieferten - Elemente ist nicht festgelegt. Sie dürfen für die Implementierung bei Bedarf Ihren Klassen + Die Klasse `HierarchicalSystem` soll so geändert werden, dass sie das gegebene + Interface `MassiveIterable` implementiert. Die Reihenfolge der vom Iterator gelieferten + Elemente ist nicht festgelegt. Sie dürfen für die Implementierung bei Bedarf Ihren Klassen `NamedBodyForcePair` und `HierarchicalSystem` neue, nicht angegebene Methoden hinzufügen. Die Verwendung von Klassen des Java-Collection-Frameworks (z.B. java.util.Stack) ist erlaubt (aber nicht notwendig). - + **3. Implementierung von `Simulation6`:** Implementieren Sie die Simulationsschleife unter Verwendung eines Objekts vom Typ @@ -71,5 +71,5 @@ Ihre Aufgaben sind folgende: - Implementierung von `MassiveForceTreeMap`: 3 Punkte - Implementierung von `MassiveIterable` in `HierarchicalSystem`: 1.5 Punkte - Implementierung von `Simulation6`: 0.5 Punkte - + - Gesamt: 5 Punkte diff --git a/angabe/Aufgabenblatt8.md b/angabe/Aufgabenblatt8.md index 641fe37..149520e 100644 --- a/angabe/Aufgabenblatt8.md +++ b/angabe/Aufgabenblatt8.md @@ -1,43 +1,43 @@ # Aufgabenblatt 8 ## Allgemeine Anmerkungen -Ihre Lösung für dieses Aufgabenblatt ist bis Dienstag, 13.6., 11h durch `git commit` und `git push` +Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 13.6., 11h durch `git commit` und `git push` abzugeben. -Wenn Sie zusätzlich zu den gefragten Klassen und Interfaces weitere Klassen oder -Interfaces definieren, achten Sie darauf, dass die Klassennamen mit `My` beginnen, um Konflikte +Wenn Sie zusätzlich zu den gefragten Klassen und Interfaces weitere Klassen oder +Interfaces definieren, achten Sie darauf, dass die Klassennamen mit `My` beginnen, um Konflikte mit späteren Aufgabenblättern zu vermeiden. -Weiters werden die Dateien `StateFileNotFoundException.java`, +Weiters werden die Dateien `StateFileNotFoundException.java`, `StateFileFormatException.java`, `ReadDataUtil.java`, `Simulation8.java`, `Simulation9.java`, - `Aufgabe8Test.java` und das Verzeichnis `states` mit `txt`-Dateien mitgeliefert. + `Aufgabe8Test.java` und das Verzeichnis `states` mit `txt`-Dateien mitgeliefert. ## Ziel -Ziel der Aufgabe ist das Verständnis und die Anwendung der Konzepte: Java-Collections, Eingabe mit +Ziel der Aufgabe ist das Verständnis und die Anwendung der Konzepte: Java-Collections, Eingabe mit Validierung, Exceptions (S. 110-123). ## Beschreibung der gegebenen Dateien -- [states](../states) ist ein Verzeichnis, in dem mehrere Dateien mit der Endung `.txt` +- [states](../states) ist ein Verzeichnis, in dem mehrere Dateien mit der Endung `.txt` mitgeliefert werden. Diese enthalten Daten von je einem Himmelskörper sowie dessen Positionen und - Geschwindigkeitsvektoren für alle Tage der Jahre 2019-2021. Die Angaben sind wie gewohnt in - kartesischen Koordinaten, wobei die Sonne den Urspung des Koordinatensystems bildet und die - Ekliptik die x-y-Ebene darstellt. Die Daten stammen von [https://ssd.jpl.nasa.gov/horizons.cgi#top](https://ssd.jpl.nasa.gov/horizons.cgi#top). - - **ACHTUNG**: Die Werte sind in km bzw. km/sec angegeben! - + Geschwindigkeitsvektoren für alle Tage der Jahre 2019-2021. Die Angaben sind wie gewohnt in + kartesischen Koordinaten, wobei die Sonne den Ursprung des Koordinatensystems bildet und die + Ekliptik die x-y-Ebene darstellt. Die Daten stammen von [https://ssd.jpl.nasa.gov/horizons.cgi#top](https://ssd.jpl.nasa.gov/horizons.cgi#top). + + **ACHTUNG**: Die Werte sind in km bzw. km/sec angegeben! + - [StateFileNotFoundException](../src/StateFileNotFoundException.java) enthält die Definition der Klasse `StateFileNotFoundException`. Diese sollen Sie vervollständigen. - [StateFileFormatException](../src/StateFileFormatException.java) enthält die Definition der Klasse `StateFileFormatException`. Diese sollen Sie vervollständigen. - [ReadDataUtil](../src/ReadDataUtil.java) ist eine Klasse mit einer statischen Methode zum -Einlesen von Position- und Bewegungsvektoren von Himmelskörpern aus Dateien. +Einlesen von Position- und Bewegungsvektoren von Himmelskörpern aus Dateien. Diese sollen Sie vervollständigen. - [Simulation8](../src/Simulation8.java) ist ein Gerüst für eine ausführbare Klasse. Hier soll die Simulation analog zur Klasse `Simulation` implementiert werden (damit Sie Ihre [ursprüngliche Datei](../src/Simulation.java) nicht überschreiben müssen). - [Simulation9](../src/Simulation9.java) ist eine leere Datei. Hier soll eine weitere Simulation -implementiert werden, die so wie `Simulation8` funktioniert, mit dem Unterschied, dass anstelle -der selbst implementierten Datenstrukturen nur vorgefertigte Klassen aus dem +implementiert werden, die so wie `Simulation8` funktioniert, mit dem Unterschied, dass anstelle +der selbst implementierten Datenstrukturen nur vorgefertigte Klassen aus dem Java-Collection-Framework benutzt werden sollen. - [Aufgabe8Test](../src/Aufgabe8Test.java) ist eine vorgegebene Klasse, die Sie zum Testen Ihrer Implementierung verwenden sollten. Bei einer fehlerfreien Implementierung sollten bei der @@ -48,44 +48,44 @@ müssen diese Klasse nicht weiter verändern, können aber eigene Testfälle hin ## Aufgaben -1. Ändern Sie Ihre Implementierung, sodass ein `MassiveIterator` eine Exception +1. Ändern Sie Ihre Implementierung, sodass ein `MassiveIterator` eine Exception vom Typ `java.util.NoSuchElementException` wirft, falls `next()` aufgerufen wird, jedoch der Iterator keine weitere Iteration hat (`hasNext()` liefert `false`). - -2. Ändern Sie den Iterator von der von `getKeys()` zurückgelieferten - Sichtweise auf `MassiveForceTreeMap` so, dass `remove()` überschrieben wird - ([siehe API Dokumentation](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#remove--)), - sodass der Iterator Einträge in Objekten von `MassiveForceTreeMap` löschen kann. Achten Sie + +2. Ändern Sie den Iterator von der von `getKeys()` zurückgelieferten + Sichtweise auf `MassiveForceTreeMap` so, dass `remove()` überschrieben wird + ([siehe API Dokumentation](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#remove--)), + sodass der Iterator Einträge in Objekten von `MassiveForceTreeMap` löschen kann. Achten Sie darauf, dass hier in bestimmten Fällen eine `java.lang.IllegalStateException` geworfen werden soll. Der Iterator von `HierarchicalSystem` muss nicht geändert werden. 3. Validierung von Eingabedaten: - Implementieren Sie in der Klasse `ReadDataUtil.java` die Methode `readConfiguration`. - Es soll ein gepufferter Stream zum Einlesen genutzt werden (siehe Skriptum Seite 128). + Es soll ein gepufferter Stream zum Einlesen genutzt werden (siehe Skriptum Seite 128). Erstellen Sie zum Testen auch Varianten der txt-Dateien mit Formatfehlern. - - Fügen Sie der Klasse `NamedBody` bei Bedarf - eine Methode `setState(Vector3 position, Vector3 velocity)` zum Setzen der Position - und des Geschwindigkeitsvektors des Himmelskörpers hinzu. - - Definieren Sie die beiden angegebenen Exceptionklassen in den entsprechenden + - Fügen Sie der Klasse `NamedBody` bei Bedarf + eine Methode `setState(Vector3 position, Vector3 velocity)` zum Setzen der Position + und des Geschwindigkeitsvektors des Himmelskörpers hinzu. + - Definieren Sie die beiden angegebenen Exceptionklassen in den entsprechenden mitgelieferten Dateien. - + 4. Ausnahmebehandlung: - In der Klasse `Simulation8` sollen nun die Himmelskörper mit Daten aus den gegebenen - txt-Dateien initialisiert werden. Dabei sollen zumindest die Sonne sowie die + In der Klasse `Simulation8` sollen nun die Himmelskörper mit Daten aus den gegebenen + txt-Dateien initialisiert werden. Dabei sollen zumindest die Sonne sowie die inneren Planeten - Merkur, Venus, Erde und Mars vorkommen. Sie können weitere Himmelskörper (siehe txt-Dateien) - hinzufügen. Nutzen Sie die Klasse `MassiveForceTreeMap` und ihre Iteratoren, um die - Himmelskörper der Simulation zu verwalten. (Kollisionen von Himmelskörpern müssen nicht + Merkur, Venus, Erde und Mars vorkommen. Sie können weitere Himmelskörper (siehe txt-Dateien) + hinzufügen. Nutzen Sie die Klasse `MassiveForceTreeMap` und ihre Iteratoren, um die + Himmelskörper der Simulation zu verwalten. (Kollisionen von Himmelskörpern müssen nicht berücksichtigt werden.) - Ändern Sie die Klasse `Simulation8` so, dass sie zwei Kommandozeilenargumente verarbeitet. - Das erste Argument ist ein String mit der Angabe des Pfades zum Verzeichnis, wo die - entsprechenden txt-Dateien (z.B. `Venus.txt`,`Mercury.txt`,`Earth.txt`) mit den Konfigurationen + Ändern Sie die Klasse `Simulation8` so, dass sie zwei Kommandozeilenargumente verarbeitet. + Das erste Argument ist ein String mit der Angabe des Pfades zum Verzeichnis, wo die + entsprechenden txt-Dateien (z.B. `Venus.txt`,`Mercury.txt`,`Earth.txt`) mit den Konfigurationen der Himmelskörper zu finden sind. Die Dateien haben die Namen der Himmelskörper mit Endung ` .txt`. Für die Sonne gibt es keine txt-Datei (es wird die Position (0,0,0) angenommen). - Das zweite Argument ist ein String mit einer Datumsangabe der Form YYYY-MMM-DD, also z.B. - 2020-Dec-04, die den Tag der auszulesenden Position und Bewegungsvektor bestimmt. Die Klasse + Das zweite Argument ist ein String mit einer Datumsangabe der Form YYYY-MMM-DD, also z.B. + 2020-Dec-04, die den Tag der auszulesenden Position und Bewegungsvektor bestimmt. Die Klasse soll beim Auftreten von Problemen bei der Ausführung entsprechende Fehlermeldungen ausgeben und - die Ausführung in bestimmten Fällen beenden. Beispiele für Aufrufe im Kommandozeileninterpreter + die Ausführung in bestimmten Fällen beenden. Beispiele für Aufrufe im Kommandozeileninterpreter mit entsprechenden Fehlermeldungen (Sie können zum Ausführen das Terminal in IntelliJ nutzen oder die Programmargumente unter `Edit Configurations` angeben): ``` @@ -101,52 +101,52 @@ müssen diese Klasse nicht weiter verändern, können aber eigene Testfälle hin Running simulation without Venus. ... $ java Simulation8 ../states-altered 2021-May-28 - Warning: File ../states-altered/Venus.txt does not have required format. + Warning: File ../states-altered/Venus.txt does not have required format. Running simulation without Venus. - Warning: File ../states-altered/Mars.txt not found. + Warning: File ../states-altered/Mars.txt not found. Running simulation without Mars. Running simulation ... $ java Simulation8 ../states -17 - Error: State has wrong format (requires YYYY-MM-DD), aborting. + Error: State has wrong format (requires YYYY-MM-DD), aborting. $ java Simulation8 blah 2021-May-28 - Warning: File blah/Earth.txt not found. + Warning: File blah/Earth.txt not found. Running simulation without Earth. - Warning: File blah/Venus.txt not found. + Warning: File blah/Venus.txt not found. Running simulation without Venus. ... ``` 5. Kopieren Sie den Inhalt der Datei `Simulation8.java` in die Datei `Simulation9.java` und bauen - Sie `Simulation9` so um, dass anstelle der selbst implementierten Datenstrukturen nur + Sie `Simulation9` so um, dass anstelle der selbst implementierten Datenstrukturen nur vorgefertigte Klassen aus dem Java-Collection-Framework benutzt werden. - + 6. Freiwillige Zusatzaufgabe (ohne Bewertung): Ändern Sie die Klasse `Simulation8` so um, dass ein drittes optionales Kommandozeilenargument - verarbeitet werden kann. Dieses gibt an, wieviele Tage simuliert werden sollen. Beispielsweise - kann eine zweite Datumsangabe möglich sein, oder die Anzahl an Tagen. + verarbeitet werden kann. Dieses gibt an, wie viele Tage simuliert werden sollen. Beispielsweise + kann eine zweite Datumsangabe möglich sein, oder die Anzahl an Tagen. Sobald dieser Zeitpunkt in der Simulation erreicht wurde, können die aktuellen Positionen der - Himmelskörper mit den in den txt-Dateien angegebenen Positionen verglichen werden (z.B. - durch erneutem Aufruf von `readConfiguration` und `draw`). Wie groß sind die Abweichungen + Himmelskörper mit den in den txt-Dateien angegebenen Positionen verglichen werden (z.B. + durch erneutem Aufruf von `readConfiguration` und `draw`). Wie groß sind die Abweichungen der von NASA errechneten Positionen zu den Positionen, die Ihre Simulation liefert? ### Denkanstöße (ohne Bewertung) -1. Haben Sie die remove-Methode des Iterators so implementiert, dass der Aufruf keine +1. Haben Sie die remove-Methode des Iterators so implementiert, dass der Aufruf keine zusätzliche Suche nach dem zu löschenden Eintrag benötigt? -2. Wie verhalten sich die von der Methode `toList()` der Klasse `MassiveForceTreeMap` -zurückgelieferten Listen, wenn deren enthaltene Himmelskörper durch `setState` verändert werden? -Werden dadurch die Himmelskörper der ursprünglichen `MassiveForceTreeMap`-Objekte auch geändert? +2. Wie verhalten sich die von der Methode `toList()` der Klasse `MassiveForceTreeMap` +zurückgelieferten Listen, wenn deren enthaltene Himmelskörper durch `setState` verändert werden? +Werden dadurch die Himmelskörper der ursprünglichen `MassiveForceTreeMap`-Objekte auch geändert? (Anmerkung: diesbezüglich gibt es im Aufgabenblatt 6 keine Vorgaben). 3. Wie verhalten sich Ihre Iteratoren, wenn Objekte geändert werden? -4. Wie kann man durch Einfügen von Zeichen `,` und newlines (`\n`) aus den `txt`-Dateien eine -"fehlerhafte" Datei machen, die trotzdem von der Methode akzeptiert wird? Kann man solche Probleme +4. Wie kann man durch Einfügen von Zeichen `,` und newlines (`\n`) aus den `txt`-Dateien eine +"fehlerhafte" Datei machen, die trotzdem von der Methode akzeptiert wird? Kann man solche Probleme verhindern? #### _Punkteaufteilung_ - Änderung von `next()` von `MassiveIterator`: 0.5 Punkte -- Implementierung der Methode `remove()` im Iterator der `MassiveSet`-Sichtweise +- Implementierung der Methode `remove()` im Iterator der `MassiveSet`-Sichtweise von `MassiveForceTreeMap`: 2 Punkte -- Implementierung der Exceptionklassen und Implementierung von `readConfiguration` +- Implementierung der Exceptionklassen und Implementierung von `readConfiguration` in `ReadDataUtil`: 1.5 Punkte - Implementierung von `Simulation8` und `Simulation9`: 1 Punkt diff --git a/src/Aufgabe8Test.java b/src/Aufgabe8Test.java index 5a85f19..501923f 100644 --- a/src/Aufgabe8Test.java +++ b/src/Aufgabe8Test.java @@ -1,100 +1,48 @@ +import org.junit.jupiter.api.Test; -import java.util.HashSet; import java.util.NoSuchElementException; +import static org.junit.jupiter.api.Assertions.*; + public class Aufgabe8Test { - public static void main(String[] args) { - - /* //TODO: uncomment for testing - + @Test + public void testEP2() { MassiveForceTreeMap map = new MassiveForceTreeMap(); NamedBody mars; - map.put(new NamedBody("Oumuamua", 8e6, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Earth", 5.972E24, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Moon", 7.349E22, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(mars = new NamedBody("Mars", 6.41712E23, new Vector3(0, 0, 0), - new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Deimos", 1.8E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Phobos", 1.08E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Mercury", 3.301E23, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Venus", 4.86747E24, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Vesta", 2.5908E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Pallas", 2.14E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Hygiea", 8.32E19, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Ceres", 9.394E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); + map.put(new NamedBody("Oumuamua", 8e6, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Earth", 5.972E24, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Moon", 7.349E22, new Vector3(), new Vector3()), new Vector3()); + map.put(mars = new NamedBody("Mars", 6.41712E23, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Deimos", 1.8E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Phobos", 1.08E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Mercury", 3.301E23, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Venus", 4.86747E24, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Vesta", 2.5908E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Pallas", 2.14E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Hygiea", 8.32E19, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Ceres", 9.394E20, new Vector3(), new Vector3()), new Vector3()); - - System.out.println("Test1:"); MassiveIterator iterator = map.getKeys().iterator(); int count = 0; - while(iterator.hasNext()) { + while (iterator.hasNext()) { if (iterator.next().equals(mars)) { iterator.remove(); } count++; } - testValue(count, 12); - testValue(map.getKeys().size(), 11); - testValue(map.getKeys().contains(mars), false); + assertEquals(12, count); + assertEquals(11, map.getKeys().size()); + assertFalse(map.getKeys().contains(mars)); - System.out.println("Test2:"); - try { - iterator.next(); - // this statement must not be reached - testValue(true, false); - } catch (NoSuchElementException e) { - testValue(true, true); - } + assertThrows(NoSuchElementException.class, iterator::next); - System.out.println("Test3:"); iterator = map.getKeys().iterator(); - while(iterator.hasNext()) { + while (iterator.hasNext()) { iterator.next(); iterator.remove(); } - testValue(map.getKeys().size(),0); - - */ //TODO: uncomment + assertEquals(0, map.getKeys().size()); } - - public static void testComparison(Object first, Object second, boolean expected) { - boolean real = first == second; - - if (real == expected) { - System.out.println("Successful comparison"); - } else { - System.out.println("Comparison NOT successful! Expected value: " + expected + " / Given value: " + real); - } - } - - public static void testValue(Object given, Object expected) { - if (given == expected) { - System.out.println("Successful test"); - } else { - System.out.println("Test NOT successful! Expected value: " + expected + " / Given value: " + given); - } - } - - public static void testValue(double given, double expected) { - if (given < expected + (expected + 1) / 1e12 && given > expected - (expected + 1) / 1e12) { - System.out.println("Successful test"); - } else { - System.out.println("Test NOT successful! Expected value: " + expected + " / Given value: " + given); - } - } - } diff --git a/src/ReadDataUtil.java b/src/ReadDataUtil.java index 3dbbe88..e177386 100644 --- a/src/ReadDataUtil.java +++ b/src/ReadDataUtil.java @@ -2,26 +2,25 @@ import java.io.*; public class ReadDataUtil { - // Reads the position and velocity vector on the specified 'day' from the file with the - // specified 'path', and sets position and current velocity of 'b' accordingly. If - // successful the method returns 'true'. If the specified 'day' was not found in the file, - // 'b' is unchanged and the method returns 'false'. - // The file format is validated before reading the state. - // Lines before the line "$$SOE" and after the line "$$EOE" the are ignored. Each line of the - // file between the line "$$SOE" and the line "$$EOE" is required to have the following format: - // JDTDB, TIME, X, Y, Z, VX, VY, VZ - // where JDTDB is interpretable as a 'double' value, TIME is a string and X, Y, Z, VX, VY and - // VZ are interpretable as 'double' values. JDTDB can be ignored. The character ',' must only - // be used as field separator. If the file is not found, an exception of the class - // 'StateFileNotFoundException' is thrown. If it does not comply with the format described - // above, the method throws an exception of the class 'StateFileFormatException'. Both - // exceptions are subtypes of 'IOException'. - // Precondition: b != null, path != null, day != null and has the format YYYY-MM-DD. - public static boolean readConfiguration(NamedBody b, String path, String day) - throws IOException { - - // TODO: implement this method. - return false; - } + /** + * Reads the position and velocity vector on the specified 'day' from the file with the + * specified 'path', and sets position and current velocity of 'b' accordingly. If + * successful the method returns 'true'. If the specified 'day' was not found in the file, + * 'b' is unchanged and the method returns 'false'. + * The file format is validated before reading the state. + * Lines before the line "$$SOE" and after the line "$$EOE" the are ignored. Each line of the + * file between the line "$$SOE" and the line "$$EOE" is required to have the following format: + * JDTDB, TIME, X, Y, Z, VX, VY, VZ + * where JDTDB is interpretable as a 'double' value, TIME is a string and X, Y, Z, VX, VY and + * VZ are interpretable as 'double' values. JDTDB can be ignored. The character ',' must only + * be used as field separator. If the file is not found, an exception of the class + * 'StateFileNotFoundException' is thrown. If it does not comply with the format described + * above, the method throws an exception of the class 'StateFileFormatException'. Both + * exceptions are subtypes of 'IOException'. + * Precondition: b != null, path != null, day != null and has the format YYYY-MM-DD. + */ + public static boolean readConfiguration(NamedBody b, String path, String day) throws IOException { + // TODO: implement this method. + return false; } - +} diff --git a/src/Simulation8.java b/src/Simulation8.java index f7ab820..c6349d2 100644 --- a/src/Simulation8.java +++ b/src/Simulation8.java @@ -1,7 +1,8 @@ import codedraw.CodeDraw; -// Simulates the solar system. -// +/** + * Simulates the solar system. + */ public class Simulation8 { // gravitational constant @@ -24,37 +25,24 @@ public class Simulation8 { // create solar system with 13 bodies MassiveForceTreeMap map = new MassiveForceTreeMap(); - map.put(new NamedBody("Oumuamua", 8e6, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Earth", 5.972E24, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Moon", 7.349E22, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Mars1", 6.41712E23, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Deimos", 1.8E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Phobos", 1.08E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Mercury", 3.301E23, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Venus", 4.86747E24, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Vesta", 2.5908E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Pallas", 2.14E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Hygiea", 8.32E19, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); - map.put(new NamedBody("Ceres1", 9.394E20, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); + map.put(new NamedBody("Oumuamua", 8e6, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Earth", 5.972E24, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Moon", 7.349E22, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Mars1", 6.41712E23, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Deimos", 1.8E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Phobos", 1.08E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Mercury", 3.301E23, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Venus", 4.86747E24, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Vesta", 2.5908E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Pallas", 2.14E20, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Hygiea", 8.32E19, new Vector3(), new Vector3()), new Vector3()); + map.put(new NamedBody("Ceres1", 9.394E20, new Vector3(), new Vector3()), new Vector3()); //TODO: implementation of this method according to 'Aufgabenblatt8.md'. // add sun after states have been read from files. - map.put(new NamedBody("Sun", 1.989E30, new Vector3(0, 0, 0), new Vector3(0, 0, 0)), - new Vector3(0, 0, 0)); + map.put(new NamedBody("Sun", 1.989E30, new Vector3(), new Vector3()), new Vector3()); } } diff --git a/src/Simulation9.java b/src/Simulation9.java index 46a473f..b0b7429 100644 --- a/src/Simulation9.java +++ b/src/Simulation9.java @@ -1,5 +1,6 @@ -// Simulates the solar system. -// +/** + * Simulates the solar system. + */ public class Simulation9 { // TODO: Implement the simulation using the Java-Collections framework.