# Bäume mit beliebig vielen Kindern



## paco89 (12. Mrz 2012)

hallo, hatte folgende aufgabe (s. Bild) versucht zu lösen. allerdings hatte ich zu dieser aufgabe nur eine methode geschrieben, die ungefähr so aussah wie die musterlösung  teil 1 (s. bild), aber wieso man eine eine 2. methode wie in musterlösung teil 2 braucht, versteh ich nicht. kann mir jmd. sagen, wieso ? und wozu die methode gut ist? die macht doch ein dasselbe wie die erste methode, oder?


wenn mir das jmd. mal erklären könnte, wäre ich sehr dankbar....jede hilfe ist willkommen....


----------



## SlaterB (12. Mrz 2012)

das sind zwei mögliche Lösungsmethoden, die in etwa dasselbe leisten, richtig,
der nicht allzu große, aber vorhandene Unterschied sollte klar sein: 
die eine Methode ist statisch, braucht einen Knoten als Parameter,
die andere ist bisschen objekt-orientierter nicht statisch


----------



## paco89 (12. Mrz 2012)

achso, okay.....dann war das echt gemein, nicht zu schreiben, dass es eine alternative Lösung ist.....zuerst dachte ich, die beiden methoden würden zusammenhängen....dann ist ja alles klar....


----------



## paco89 (13. Mrz 2012)

hallo, dazu hatte ich eine andere aufgabe....teilaufgabe b) (s.bild)....ich konnte die aufgabe nicht lösen und da hab ich in die musterlösung geschaut und versucht mir das ganze zu erklären....dabei stieß ich auf ein paar fragen.....

da wird doch zuerst ein objekt vom res vom typ List als formaler parameter übergeben, der dann auf null zeigt, oder? so und dann kommen die if-abfragen, bspw. wenn ein firstChildren-Zeiger des aktuellen objekts existiert, dann soll res darauf zeigen und res soll durch getValue(res) den wert dieses objekts erhalten, oder? aber wieso steht in der klammer von getValue(res) das res? das versteh ich nicht so ganz....


wenn mir das jmd. erklären kann, wäre ich sehr dankbar....


----------



## SlaterB (13. Mrz 2012)

> wenn ein firstChildren-Zeiger des aktuellen objekts existiert
== 
wenn im aktuellen Objekt die Variable/ Referenz firstChildren gesetzt, also ein Kind vorhanden ist

> dann soll res darauf zeigen und res soll durch getValue(res) den wert dieses objekts erhalten, oder?

dann soll durch Methodenaufruf bei diesem Kind eben dieses Kind bzw. dessen int-Wert in die Liste res aufgenommen werden
(und evtl. rekursiv noch mehr),
falls res noch null ist, wird ja erst noch eine Liste erzeugt, deshalb auch der Rückgabewert wichtig,
evtl. ist der übergebene Parameter null, dann nicht wirklich 'die Liste'

> aber wieso steht in der klammer von getValue(res) das res?

res ist die Liste (sofern nicht noch null), in res sollen die Werte rein, die Untermethoden brauchen res, brauchen die Liste, 
also wird sie übergeben, die normalste Sache der Welt


----------



## nillehammer (13. Mrz 2012)

Also zunächst zur Aufgabe selbst. Der Name List für die Klasse ist aus zwei Gründen mal so richtig schlecht:

List ist der Name einer sehr wichtigen Klasse (genau genommen Interface) des Collection Frameworks. Auch wenn über Packages die Eindeutigkeit des Namens gegeben ist, ist es eine schlechte Idee, den Namen zu vergeben.
Die dargestellte Klasse ist garkeine List, sondern allenfalls ein ListElement oder sowas.
Aber egal, es steht ja nunmal so in der Aufgabe. Sinn der Aufgabe ist, eine öffentliche Methode bereitzustellen, die die Gesamtheit aller Knoten ausgibt. Dazu soll sich einer privaten Hilfsmethode bedientwerden, die rekursiv alle Kindknoten durchläuft und die Werte der Ausgabe hinzufügt. Der Gag bei der Rekursion ist, dass getValue(res) eine Instanzmethode ist, die immer mit den Werten des Objekts arbeitet, auf dem sie aufgerufen wird. Da ist es nicht schlimm, dass beim initialen Aufruf null übergeben wird. Die Methode arbeitet immer mit den lokalen Membern (this.xxx).


----------



## SlaterB (13. Mrz 2012)

> Die dargestellte Klasse ist garkeine List, sondern allenfalls ein ListElement oder sowas.

was ist die Definition einer Liste? wenn Methoden wie contains() usw. vorhanden sind, und auch den Rest der Liste durchlaufen,
dann kann man das sehr wohl als stimmig betrachten, 
gerade dieses Konzept mit Kopf- + Rest-Liste ist ja auch recht verbreitet


----------



## nillehammer (13. Mrz 2012)

> was ist die Definition einer Liste? wenn Methoden wie contains() usw. vorhanden sind,


Hast Recht, das contains() hab ich garnicht beachtet. Ich hatte mich mehr mit den Variablen value und next beschäftigt. Aber mit den Methoden ist das schon richtig. Jedes Element ist gleichzeitig eine Liste seiner Nachfolger. Das macht schon Sinn.


----------

