Welt in GameOfLife klonen

JanFausO

Mitglied
Hallo, ich habe folgendes problem:
Ich muss in GameOfLife eine vom Original kopierte Welt in ein aktuelles Array kopieren und mir fällt nicht so recht ein wie ich das lösen kann.
Im Code unten soll jetzt w1 in das Array CellState [][] worldarray überschrieben werden, leider weiß ich nicht recht wie.
Ich hoffe ihr könnt mir helfen, im Voraus besten Dank!!

Java:
   /**
     * Erstellt eine Welt als Kopie.
     *
     * @param w1;w2
     * @return
     *
     */
    public World(World other) throws IllegalWorldSizeException {
        this.width = other.getWidth();
        this.height = other.getHeight();
       
        World w1 = new World(width, height);
        for (int hoehe = 0; hoehe < this.getHeight(); hoehe++) {
            for (int laenge = 0; laenge < this.getWidth(); laenge++) {
                w1.set(laenge, hoehe, this.getField(laenge, hoehe));
              
            }
     
        }
       
    }
 

Meniskusschaden

Top Contributor
Hier sind drei World-Objekte im Spiel:
  1. Die aktuelle Welt (this), die gerade erzeugt wird (dein Code-Ausschnitt ist ja ein Konstruktor).
  2. Die dem Konstruktor übergebene Welt other.
  3. Die im Konstruktor erzeugte Welt w1.
Zu welchem Zweck erstellst du w1? Du könntest doch einfach die Daten aus other in this kopieren.
 

JanFausO

Mitglied
Also in der Aufgabenstellung steht es Folgendermaßen:
public World (World other)
Erstellt eine Welt als Kopie von other. Diesen Kopie-Konstruktor benötigen Sie im späteren Verlauf für die Spiellogik.
Achten Sie darauf, dass keine Referenzen zu Inhalten von other bestehen, sprich Änderungen nur in der neuen Welt auftreten.

Deswegen dachte ich, dass ich wenn ich keine neue Welt erstellen würde, ja stets die Daten in beiden Welten ändern würde und das ja laut Aufgabenstellung verboten ist.
 

Meniskusschaden

Top Contributor
Durch den Aufruf deines Konstruktors erstellst du ja bereits eine Welt. Wenn du innerhalb des Konstruktors dann noch eine erstellst, hast du eben eine zuviel. Den Code deines zweiten Konstruktors hast du nicht gepostet, aber falls der ähnlich arbeitet, kommt es sogar zu einer Endlos-Rekursion und schließlich zu einem Stack-Überlauf.
Hier findest du Infos zu Kopier-Konstruktoren.
 

Meniskusschaden

Top Contributor
Wird aber problematisch sobald mutable Objects verwendet werden. Jedenfalls mit dem da erwähnten Beispiel.
Stimmt. Aber soweit ich es sehe, führt das doch noch nicht zu Problemen, wenn das zu kopierende Objekt mutable ist, sondern erst, wenn es Attribute mit mutable Objects enthält? Das wäre im Buch und im bisher gezeigten World-Code ja (noch?) nicht der Fall. Im Buch wäre ein entsprechender Hinweis vielleicht auch angebracht.
 

Dompteur

Top Contributor
Also in der Aufgabenstellung steht es Folgendermaßen:
public World (World other)
Erstellt eine Welt als Kopie von other. Diesen Kopie-Konstruktor benötigen Sie im späteren Verlauf für die Spiellogik.
Achten Sie darauf, dass keine Referenzen zu Inhalten von other bestehen, sprich Änderungen nur in der neuen Welt auftreten.

Deswegen dachte ich, dass ich wenn ich keine neue Welt erstellen würde, ja stets die Daten in beiden Welten ändern würde und das ja laut Aufgabenstellung verboten ist.

Du hast ja eine Instanz-Variable, die den Zustand der Welt darstellt : CellState [][] worldarray
Statt eine neue Welt (w1) zu erstellen, musst du nur das Array worldarray anlegen und befüllen.
Das müsstest du im anderen Konstruktor ja bereits gemacht haben.
 

JStein52

Top Contributor
Statt eine neue Welt (w1) zu erstellen, musst du nur das Array worldarray anlegen und befüllen.
Laut Aufgabenstellung soll er aber einen Copy-Konstruktor erstellen ... also schon eine neue Welt.

Edit: Vielleicht meintest du aber dass er in diesem Copy-Konstruktor eine neues
CellState[][] worldarray anlegen und befüllen muss.
 

Dompteur

Top Contributor
Edit: Vielleicht meintest du aber dass er in diesem Copy-Konstruktor eine neues
CellState[][] worldarray anlegen und befüllen muss.

Genau das meinte ich. Der Copy-Konstruktor erstellt ja bereits die Welt.
Die World-Klasse hat 3 Instanzvariablen (width, height und worldarray).
2 davon wurden bereits richtig belegt. Es fehlte also nur mehr die Behandlund der Instanzvariablen worldarray.

P.S.: Ich kenne das Beispiel, da ich vor ein paar Tagen jemandem bei der Lösung geholfen habe. ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
S Hallo Welt Java Basics - Anfänger-Themen 11
S Die Welt von Zuul Java Basics - Anfänger-Themen 2
A Greenfoot - Objekt im Vordergrund lassen, bei einer scrollbaren Welt ohne zentrierten Actor Java Basics - Anfänger-Themen 3
A Compiler-Fehler Hallo Welt Fehler Java Basics - Anfänger-Themen 5
T Welt mit while-Schleife umzäunen Java Basics - Anfänger-Themen 27
P 2D Welt, Hashtable Java Basics - Anfänger-Themen 5
I Probleme bei der Abstraktion der realen Welt Java Basics - Anfänger-Themen 8
F Komme aus der Delphi-Welt und brauch jetz Java. Java Basics - Anfänger-Themen 5
5 hallo welt als .jar Java Basics - Anfänger-Themen 16
G Hallo Welt Java Basics - Anfänger-Themen 10
A Neuling in der Java Welt Java Basics - Anfänger-Themen 5
S Blutiger Anfänger- "Hallo Welt" unter JBuilder Java Basics - Anfänger-Themen 5
H "Conways GameofLife - Vom Reader ins Array" Java Basics - Anfänger-Themen 5
P GameofLife Java Basics - Anfänger-Themen 3
S Objekte klonen und Deep Copy Java Basics - Anfänger-Themen 30
D komplexe Datenstrukturen "klonen" Java Basics - Anfänger-Themen 4
M Methoden Array unbedingt klonen? und Point Frage. Java Basics - Anfänger-Themen 4
M Variablen return-array klonen Java Basics - Anfänger-Themen 3
P Tiefes Klonen Java Basics - Anfänger-Themen 2
U ArrayList Klonen Java Basics - Anfänger-Themen 15
W Java Fenster durch Buttonclick klonen Java Basics - Anfänger-Themen 4
B OOP Objekt klonen (Grundzustand), um in Editor "Abbrechen" zu können Java Basics - Anfänger-Themen 4
K Klonen und Kopieren von Dateien Java Basics - Anfänger-Themen 6
0 JComponent klonen? Java Basics - Anfänger-Themen 13
B JPanel klonen Java Basics - Anfänger-Themen 13
B LinkedList klonen Java Basics - Anfänger-Themen 8
T Fehlermeldung beim Klonen eines JPanels Java Basics - Anfänger-Themen 8
M ResultSet klonen Java Basics - Anfänger-Themen 6
S Objekt klonen mit clone() Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben