ich hab hier eine statische methode die eine Liste mit Strings zurückgeben soll. Die Methode ist Teil eines Algorithmus zum durchsuchen von Bäumen (Reise von Stadt A nach B) und der Weg der besuchten Städte soll über diese Methode als Strings in einer Liste zurückgegeben werden.
Nur scheitere ich etwas daran die Strings in diese doofe Liste reinzukriegen, weil java da irgendwas mit dem typen nicht so richtig passt.
Code:
public static List getPathToGoal(ITreeNode root, Object goalNode)
{
if (root.getValue().equals(goalNode))
return new LinkedList().add(root.getValue().toString());
Iterator it = root.getChildren().iterator(); //Listeniterator holen
List i = new LinkedList();
while (it.hasNext()) //Solange Listen nicht leer ist
{
if(getPathToGoal((ITreeNode)it.next(), goalNode) == null)
i.add((Object)((ITreeNode)it.next()).getValue().toString());
}
return i;
}
Und zwar hab ich primär an der Stelle probleme wo ich oben mit der if-abfrage prüfe ob mein aktueller knoten der zielknoten ist. hier müsste ich jetzt ein objekt/string zurückgeben, nur ich schaffe es nicht das objekt als "liste" zu verpacken um den rückgabewert der funktion einzuhalten.
kann mir jemand helfen ?
Der Typ der Liste ist im Methodenkopf mit "List" angegeben, da ich davon aber keinen Typ erzeugen konnte, hab ich LinkedList benutzt, was wohl ebenfalls nicht so das wahre ist.....
Benutz statt deinem Listentyp die ArrayList und typisiere sie mit <String>
Tüdell alles in die Liste und gib sie zurück...
Hokuspokus... Tada...
Vorsicht der Quellcode ist nicht getestet
Code:
public static ArrayList<String> getPathToGoal(ITreeNode root, Object goalNode)
{
ArrayList<String> resultList = new ArrayList<String>();
if (root.getValue().equals(goalNode)) {
resultList.add(root.getValue().toString());
return resultList;
}
Iterator it = root.getChildren().iterator(); //Listeniterator holen
while (it.hasNext()) //Solange Listen nicht leer ist
{
ITreeNode temp = (ITreeNode)it.next();
if(getPathToGoal(temp, goalNode) == null) {
resultList.add(temp.getValue().toString());
}
}
return resultList;
}
EDIT:
Hab den Quellcode gerade noch editiert. Zweimal it.next() in einem Schleifendurchlauf ist vielleicht auch nicht so doll. Bin mir nicht ganz sicher, weil ich momentan nicht testen kann, aber ich glaube sonst überspringst du immer einen Eintrag. Deshalb speichert man das ganze besser in einer lokalen Variable (hier temp) ab.
Ja danke, ich hab aber noch ein Problem mit meiner Rekursion.
ich möchte ja den ganzen weg der rekursion vom start zum ziel haben. wenn ich am ende bin, geb ich mit der "resultList" mein ziel zurück, das klappt soweit. jetzt müsste ich aber beim rücklauf der rekursion für jeden besuchten punkt den weg quasi rückwärts in die liste eintragen.