Collections Erstellung eines Listeneintrags einer verketteten Liste

  • Themenstarter Themenstarter toastkiller777
  • Beginndatum Beginndatum
T

toastkiller777

Gast
Hallo, ich bin noch ein ziemlicher Java Anfänger und darum scheint die Frage womöglich ziemlich trivial, aber ich verstehe einfach nicht was aus dieser Aufgabenstellung gefordert ist.

Anscheinend sind Instanzvariablen gefordert, dies müssten doch die öffentlichen Variablen der Liste sein. Sollten es diese sein, wären die Getter und Setter kein großes Problem. Mein Hauptproblem ist der Konstruktor. So wie ich denke wird hier eine neue ShapeList erstellt, an die dann die im Konstruktor übergebene Form angefügt wird. Aber dann hätte ich eine Liste in einem Listenelement erstellt, was mir wiederum komisch vorkommt, weil es logischer wäre übergebene Werte abzuspeichern und diese bei Bedarf der Liste hinzufügen zu können bzw. diese wieder von ihr zu entfernen. Ich bin ziemlich verwirrt, da ich eigentlich nur lernen musste wie man eine verkettete Liste erstellt und sie direkt verändert, ohne eine eigene Klasse dafür zu erstellen.

Hoffentlich konnte ich diese Frage halbwegs verständlich stellen und ich bin für jede Antwort und Denkanstöße sehr dankbar!
 

Anhänge

  • gdiws11.png
    gdiws11.png
    111,2 KB · Aufrufe: 48
Code:
Liste
  |
  |  head
  v
elem1 -> elem2 -> elem3
  |        |        |
  |        |        |
  v        v        v
wert1    wert2    wert3

Hey, danke für deine Antwort! Also, wenn ich es richtig verstanden habe, kommt in den Konstruktor das erste Element , auf das der Kopf verweist und danach (außerhalb des Konstruktors) sollte eine Methode vorkommen, die weitere Elemente anfügt und entfernt oder?
 
Liste entspricht einem ShapeList-Objekt - in ShapeList ist der Konstruktor schon vorgegeben.
Die elemX entsprechen ShapeListElement-Objekten, wertX den Shape-Instanzen.

Am Anfang ist die Liste leer, head also null. Jetzt fügst Du per ShapeList#insertFront ein Shape ein. Für dieses Shape braucht die Liste ein neues ShapeListElement, das das Shape "speichert" (das ist der Pfeil von elemX nach wertX). Nach insertFront muss head auf das eingefügte ShapeListElement zeigen (s. head-Pfeil).

Das reicht aber noch nicht ganz, denn Du musst ja auch für die Verkettung der ShapeListElement-Objekte sorgen. D. h. ShapeListElement muss eine Instanzvariable private ShapeListElement next; besitzen (das sind Pfeile nach rechts).

Da jedes ShapeListElement sowohl ein Shape als auch eine Referenz auf ein nächstes ShapeListElement besitzt, kann man sich für den Konstruktor (EDIT: von ShapeListElement) was "überlegen".

Ansonsten musst Du Dir nur noch klar machen, was mit head passieren muss, wenn dieser vor dem Aufruf von insertFront bereits gesetzt war...

Bei Problemen zeichne Dir am beste eine leere Liste, eine Liste mit einem Shape s und eine Liste mit zwei Shapes s und t auf (inkl. der zugehörigen ShapeElements natürlich). Dann sollte das kein Problem mehr sein.
 
Okay, ein Knoten hat also immer einen Wert und einen Zeiger auf sein Nächstes Element, also brauche ich 2 Attribute. Diese Werte sollen für jeden Knoten neu erstellt werden, daher kommen sie in den Konstruktor. Mein derzeitiger Code sieht demnach so aus:
Java:
public class ShapeListElement{
       private Shape shape;
       private Shape elementNext;
       public ShapeListElement(Shape shape){
                this.shape = shape;
                this.elementNext = null;
       }
       public Shape getShape(){
       return this.shape;
       }
       public Shape getElementNext(){
       return this.elementNext;
       }
       public void setShape (Shape shape){
       this.shape = shape;
       }
       public void setElementNext(Shape elementNext){
       this.elementNext = elementNext;
       }
}
Geht das in die richtige Richtung oder bin ich noch immer auf dem Holzweg?
 

Neue Themen


Zurück
Oben