OOP Einstandsfrage: Verkettete Listen

Schnatterinchen

Neues Mitglied
Hallo,
ich muss als Einstand gleich mit einer Frage kommen =(. Leider weiß ich mir sonst nicht zu Helfen :(
Ihr seid meine Rettung :)

Die Aufgabe: es geht um verkettete Listen!

Ich lad Euch einfach mal das UML hoch und die Aufgabe und das was ich schon gemacht habe :)
Das UML:
picload.org - fast 'n' easy imagehost

die Aufgabe:
picload.org - fast 'n' easy imagehost

und was ich schon gemacht habe:

Klasse IListe:
Java:
package liste;

public interface IListe  {
    public void einfuegen (Object element);
    public void loescheAktuellesElement();
    public boolean listenStart();
    public boolean naechstesElement();
    public ListenElement aktuellesElement();
    public boolean istLeer();
}
Klasse Liste:
Java:
package liste;

class Liste implements IListe {
//private int test;
    private IListenElement aktuellesElement;
    private IListenElement erstesElement;
    public void Liste () {
        erstesElement=null;
    }
    
    public void einfuegen(Object element) {
        // TODO Auto-generated method stub
    }

    public void loescheAktuellesElement() {
        // TODO Auto-generated method stub
        
    }

    public boolean listenStart() {
        // TODO Auto-generated method stub
        return false;
    }

    public boolean naechstesElement() {
        // TODO Auto-generated method stub
        return false;
    }

    public ListenElement aktuellesElement() {
        // TODO Auto-generated method stub
        return null;
    }

    public boolean istLeer() {
        // TODO Auto-generated method stub
        return false;
    }

}

Klasse IListenElement:
Java:
package liste;

public interface IListenElement {
    public IListenElement getNachfolger();
    public IListenElement setNachfolger(IListenElement nachfolger);
    public Object getElement();
}

Klasse ListenElement:
Java:
package liste;
import liste.IListe;
public class ListenElement implements IListenElement {
    private Object element;
    public IListenElement getNachfolger() {
        element=new Object(IListe.aktuellesElement());
        
        
    }
    public final IListenElement setNachfolger(Object nachfolger) {
        return null;
    }
    public Liste getElement() {
        return null;
    }
    public IListenElement setNachfolger(IListenElement nachfolger) {
        // TODO Auto-generated method stub
        return null;
    }
}


ich komme nun nicht weiter.
Ich wollte die Klasse ListenElement runter programmieren.
Und zwar grade die Methode getNachfolger()
get nachfolger soll ja aus der Liste den Nachfolger holen.
Dazu muss ich ja aus IListe die Methode naechstesElement(); aufrufen, die mir n bool zurück geben soll wenn es ein nächstes Element gibt und gleichzeitig auf das nächste Element zeigen soll.
Danach muss ich ja aktuellesElement(); aufrufen um das aktuelle Element zu bekommen
nur wie mache ich das. Wie kann ich aus ListenElement auf IListe zugreifen ?
Das ist bestimmt nicht die einzige Frage aber erstmal ein Ansatz wäre toll =)
viele Grüße und Danke schon Einmal
Schnatterinchen
 
Zuletzt bearbeitet:
S

SlaterB

Gast
alles viel zu kompliziert was du zu getNachfolger() schreibst,
das kleine ListenElement kennt die große Liste gar nicht, deren Methoden sind tabu, die brauchen ja gerade erst funktionierende Elemente,

ein ListenElement hat einfach eine Variable, ein Attribut, in dem das nächste Element drinsteht, die get-Methode gibt das zurück und fertig,
set setzt es übrigens

keine große Magie, aber jedes Kernkraftwerk besteht zunächst aus simplen Schrauben
 

Schnatterinchen

Neues Mitglied
Danke schon einmal =)
komm nun aber an ner anderen Stelle nicht weiter
ListenElement sieht nun so aus:
Java:
package liste;
public class ListenElement implements IListenElement {
    private Object element;
    private IListenElement nachfolger;
    
    public ListenElement(Object element) {
        this.element=element;
    }
    
    public IListenElement getNachfolger() {
        return this.nachfolger;
    }
    
    public Object getElement() {
        return this.element;
    }
    
    public void setNachfolger(IListenElement nachfolger) {
        this.nachfolger=nachfolger;
    }
}

Bin nun am Programmieren der Klasse Liste

Java:
package liste;

class Liste implements IListe {
    private IListenElement aktuellesElement;
    private IListenElement erstesElement;
    public Liste() {
        this.aktuellesElement=null;
        this.erstesElement=null;
    }
    public void einfuegen(Object element) {
        this.erstesElement=element;
        // warum steht hier im UML Object ... die Methode soll an den Anfang der Liste ein neues Objekt schreibem. aber erstes Element ist ein IListenElement kein Object!
        
    }

    public void loescheAktuellesElement() {
        this.aktuellesElement=null;
        
    }

    public boolean listenStart() {
        this.erstesElement=this.aktuellesElement;
        if (this.erstesElement==null)
            return false;
        else 
            return true;
    }

    public boolean naechstesElement() {
        //die hier hab ich keine ahnung wie die geht

        this.aktuellesElement=aktuellesElement.setNachfolger(aktuellesElement.getNachfolger());
        //wo ist hier der fehler ??
        
        if (aktuellesElement.getNachfolger()==null)
            return false;
        else 
            return true;
                
    }

    public ListenElement aktuellesElement() {
        return this.aktuellesElement();
    }

    public boolean istLeer() {
        // TODO Auto-generated method stub
        return false;
    }
}

speziell an der Methode
naechstesElement
und Listenstart
hab aber keine ahnung warum das nicht geht :(
 
S

SlaterB

Gast
> aktuellesElement.setNachfolger(aktuellesElement.getNachfolger());

ist für sich sinnlos, aktuellesElement Y hat schon X als Nachfolger, wieso nochmal mit set setzen?
die set-Methode hat zudem keinen Rückgabewert, wieso dieses gesamte Konstrukt noch woanders zuweisen?
generell lieber kurze und viele Zeilen als lange komplizierte

schließlich musst du dringend unterscheiden, eine Laufvariable zu ändern (aktuellesElement etwas zuweisen) oder die Listenstruktur zu ändern (in den Elementen Nachfolger ändern),
letzteres ist absolut nicht angebracht

was soll passieren? der Variablen aktuellesElement soll ein neuer Wert zugewiesen werden, und zwar der Nachfolger:

[c]aktuellesElement = aktuellesElement.getNachfolger();[/c]
oder kürzer und einfacher gestrickt, wobei hier schon grenzwertig durch neue Variablen, aber zumindest deutlicher:
[c] Element nachfolger = aktuellesElement.getNachfolger(); [/c]
[c]aktuellesElement = nachfolger;[/c]

so unendlich schwer?,
selbst wenn nicht auf Anhieb, dann lieber 10 Min. Posting formulieren und 30 Min. warten als selber auf diese Zeile zu kommen?

dabei ist darauf zu achten, ob aktuellesElement nicht zu diesem Zeitpunkt null sein kann,

ob DANACH noch ein weiterer Nachfolger vorhanden ist, das ist NICHT im Rückgabewert auszudrücken,
also noch bisschen mehr zu tun

---------

> public boolean listenStart() {
> this.erstesElement=this.aktuellesElement;

falsch rum, auch hier ist aktuellesElement zu ändern, nicht erstesElement
 
Zuletzt bearbeitet von einem Moderator:

Oben