ich habe eine Methode die ich rekursiv aufrufe. HIer mal in Pseudocode...
methode()
{
...
rekAufruf(); sysout(erg.wert); return erg;
...
}
So in der Art. Nun wird nach meinen Aufrufen auch korrekt der Wert von erg korrekt ausgegeben.
D.h. ich hätte dann
wert1
wert2
usw.
Nun will ich aber das Objekt erg in einem Array abspeichern. Also eigentlich am Ende aller Aufrufe alle erg in einem Array zurückgeben. Das Problem ist nun das dynamische anlegen und speichern des Arrays.
An der Stelle sysout(erg.wert); soll jetzt eigenlich erg in ein Array gespeichert werden, das bekomme ich aber nicht hin. Ich komme zwar z.B. 4 mal richtig dort an und geben alles korrekt aus, aber kann es halt nicht abspeichern. Hat wer eine Lsg.?
Ich kann es nicht abspeichern heißt in dem Fall nur, ich weiß nicht wie ich bei der Rekursion ein Array dynamisch erzeugen kann, was die Objekte aufnimmt und dann zurückgibt. Wenn ich die Methode einmal aufgerufen habe, macht Sie rekursiv ihre Arbeit und gibt am Ende halt x-mal z.B. aus: Wert1,Wert2,Wert3. Wobei jetzt die Werte natürlich die ausgelesenen Werte eines Objektes sind... Hat also jemand eine Idee?
Ich kann doch aber die ArrayList nicht in die Methode reinschreiben, da die Array list ja sonst n-mal neu angelegt werden würde. Ich brauche also eine "globale" Liste, in die ich dann mein Zeug packen kann.
Das ganz läuft mit einer Helper-Methode ziemlich
genau folgendermaßen ab:
Code:
public ArrayList methode(int arg) {return methode(arg, new ArrayList());}
public void methode(int arg, ArrayList list) {
if (n > 0) {
list.add(calc(arg));
methode(n-1);
// oder erst rekursiver Aufruf, und dann eintragen
}
return list;
}
Du rufst diese Methode wie gehabt auf (sie liefert dir eine ArrayList zurück(*)).
Die Methode bastelt sich dann eine leere ArrayList und schleift
diese durch die rekursive Helper-Methode, die sie mit deinen Berechnung
pro rekursivem Aufruf füllt.
(*) Du kannst auch statt mit
Code:
return methode(arg, new ArrayList())
die ArrayList selbst zurückzugeben, gleich ein fertiges
Array aus dem Rückgabewert der Helper-Methode erzeugen
und dieses zurückgeben.
mein erster Aufruf ist ja in der Main Klasse. Muss ich die HelperKlasse nun in die Main Klasse packen? innerhalbt der Methode ruft sich dann diese rekursiv auf. Weil wenn ich den Aufruf nicht in der Main machen würde, würde es mir ja immer eine neue Helper Methode erzeugen. Oder verstehe ich das falsch? D.h. statt der Methode rufe ich die Helper Klasse auf mit new?
methode und dann erst in der methode selber wird diese rekursiv aufgerufen. Deshalb ist mir noch nicht ganz klar, wie ich die HelperKlasse in de methode selbst packen soll, ohne dass diese dann immer neu erzeugt wird.
in der main rufst du
methode(5);
auf,
da methode nicht statisch ist, brauchst ein Objekt der entsprechenden Klasse,
angenommen diese Klasse heißt Helper:
Helper h = new Helper();
h.methode(5);
diese main-Operation muss nicht Teil der Klasse Helper sein,
man kann Helper-Objekte von überall aus erzeugen,
solange die Klasse Helper public ist und die Konstruktoren auch public sind