zwei-dimensionale Collections bzw. Array mit Indizes

blechzange

Neues Mitglied
Hallo,

vielleicht könnt ihr mir zu folgendem Punkt, einen Tipp geben:

Ich habe eine Klasse, die ein zweidimensionales Array von einer zweiten Klasse verwaltet, dazu habe ich einige Methoden, um einigermaßen komfortabel damit umzugehen.

Leider verlangt es die Natur des Problems (Spielfeld), dass ich eine zweidimensionale Ebene brauche. Nun ist der Körper der Klasse aber schon ziemlich gewachsen (mehr als 1000 Zeilen) und vor allem Exception-Handling undurchsichtig.

Eigentlich wollte ich eine weiter Ebene zur Abstraktion hinzufügen, um irgendwie eine Collection/etc. benutzen zu können, da diese schon 90% der benötigten Methoden mitbringt. Gibt es hier irgendeinen sinnvollen Ansatz?! Momentan könnte ich das ganze Programm in C realisieren, habe also keinen technischen Vorteil außer Objekt-Orientierung an sich.

Hat jemand schon eine Collection mit weiteren Collections als Elemente probiert, macht das irgendeinen praktischen Sinn?


Danke,
 
Ich habe eine Klasse, die ein zweidimensionales Array von einer zweiten Klasse verwaltet, dazu habe ich einige Methoden, um einigermaßen komfortabel damit umzugehen.

Leider verlangt es die Natur des Problems (Spielfeld), dass ich eine zweidimensionale Ebene brauche. Nun ist der Körper der Klasse aber schon ziemlich gewachsen (mehr als 1000 Zeilen) und vor allem Exception-Handling undurchsichtig.
Leider? Soooo schlimm sind 2 Dimensionen auch wieder nicht.

Das nennt man unagenehme Nebeneffekte des organischen Wachstums ;-)
Bei der Grösse und der jetzt noch komplexer werdenden Datenstruktur lohnt sich wohl ein kompletter Redesign.

Eigentlich wollte ich eine weiter Ebene zur Abstraktion hinzufügen, um irgendwie eine Collection/etc. benutzen zu können, da diese schon 90% der benötigten Methoden mitbringt. Gibt es hier irgendeinen sinnvollen Ansatz?!
Eigentlich? Was spricht dagegen?
irgendwie? Programmierst du mit der Blechzange? 🙂 (Bitte verzeih den witzig gemeinten Spruch, SCNR)

Mit so wenig Angaben kann hier wohl kaum jemand sagen, was Sinn macht.

Hat jemand schon eine Collection mit weiteren Collections als Elemente probiert, macht das irgendeinen praktischen Sinn?

Versuchsweise hatte ich eine Hasmap in der ich Maps gespeichert habe.
Technisch gesehen ist das kein Problem (Genau so wenig wie 2D Arrays) ob es für dein spezifisches Problem die Ideale Lösung ist ... keine Ahnung.

Bei einem Redesign stellst sich immer die Frage welche Teile abgeändert und welche neu geschrieben werden. Aufgrund deiner Angaben vermute ich, dass ein Neuanfang besser ist - vielleicht mit einigen Klassen.

Wenn du uns den neuen Code zeigst helfen wir gerne weiter, aber die bestehenden 1000 Zeilen zu posten bringt halt nicht viel.
 
Zuletzt bearbeitet:
HashMap war ein wertvoller Tipp. Ich habe jetzt einen java.awt.Point (2D), der ohnehin x und y-Koordinaten beinhaltet, als Key für meine Klassen verwendet. Der Hauptteil hat jetzt nur noch ca. 50 Zeilen, siehe:

Java:
import java.util.HashMap;
import java.awt.Point;

public class Battlefield {

    private HashMap field;
    private Point max;

    public Battlefield(Point p) {
        max = p;
        field = new HashMap( (int) (p.getY() * p.getX()) );
    }
    public Battlefield(Battlefield b) {
        this(b.getMax());
    }
    public void placeUnit(Point p, Unit u) {
        field.put(p, u);
    }
    public Unit getUnit(Point p) {
        Unit u;
        u = (Unit) field.get(p);
        return u;
    }
    public void removeUnit(Point p) {
        field.remove(p);
    }
    public void moveUnit (Point oldp, Point newp) {
        Unit u;
        u = this.getUnit(oldp);
        this.removeUnit(oldp);
        this.placeUnit(newp, u);
    }
    public Point getMax() {
        return max;
    }

}

Sicher noch nicht fertig, aber ein großer Fortschritt, oder?

Danke,
 
Hm, also wenn ich das mit Array implementieren müsste ---- :shock:
Viel kann man noch nicht sagen, aber die Anfänge sehen gut aus.
 

Neue Themen


Zurück
Oben