Wie funktioniert der Java Code?


21.06.2022, 10:59

Node n ist der erste Knoten also der head

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Moin,

du kommst rein, es wird geschaut, ob es einen nächsten Knoten gibt. Wenn nicht, wird ins Else gegangen und der nächste Knotenpunkt übergeben. Das geht so lange weiter, bis es keinen nächsten Knoten mehr gibt.

Dann wird die Methode verlassen und man ist in der Instanz davor, die noch in der Zeile "reversePrint(n.getNext());" steht - die gibt dann den Node in der Konsole aus.

Dann wird die Methode wieder verlassen und wir rutschen wieder eine Ebene höher.

Das geht so lange, bis wir bei der ersten Ausführung sind und die Methode vollständig beenden.

Wir sind also quasi mehrmals in der selben Methode gleichzeitig, nur, dass die vorherigen Durchgänge gestoppt werden und warten, bis die nächste Instanz fertig ist.

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting

TripleBinary 
Fragesteller
 21.06.2022, 11:06

ah ja danke, brainfuck, dachte es wäre etwas trivialer, das hast doch hier etwas mit heap und stack zu tun oder? wie kann ich das verstehen oder bin ich zu dumm? Also bringt es was weiter zu machen bzw. muss man sowas mehrmals machen um es zu verstehen oder ist es eine Sache die man also normaler Programmieranfänger sofort versteht? ABer danke schonmal für die hilfreiche Erklärung

0
Dultus, UserMod Light   21.06.2022, 11:11
@TripleBinary

Ich gehe mal nicht zu weit ins Detail, das hilft Anfängern eher gar nicht. :-)

IDEs bieten dir ein hervorragendes Tool zum besseren Verständnis; Breakpoints! Ich weiß nicht, welche IDE du verwendest aber du kannst Punkte setzen, die an der gewählten Stelle stoppen.

Dadurch siehst du die Werte der Variablen und kannst Schritt-für-Schritt durch den Code gehen. Dann siehst du auch, dass der Code dann wieder nach der Ausführung in die Zeile springt.

Du musst dir nur merken, dass du mehrere Instanzen einer Methode haben kannst und daher auch an verschiedenen Punkten gleichzeitig stehen kannst.

Quasi so, als hättest du diese Methode 5 mal erstellt und würdest anstelle sich selbst zu rufen eine jeweils andere aufrufen. Da wir nicht wissen, wie weit wir in die Nodes abtauchen können, machen wir das rekursiv - also mit dem Aufruf der selbigen Methode, in der man sich befindet.

2
TripleBinary 
Fragesteller
 21.06.2022, 11:14
@Dultus, UserMod Light

ah okay, ja jetzt langsam bildet sich eine Anbahnung von Verständnis. Danke ich schau mir das gnaze Thema nochmal an.

1

Bevor der Inhalt des Knotens ausgegeben wird, sagt die Methode

"Moment bitte - ich erledige erst noch eine Unteraufgabe!"

Diese Unteraufgabe ist, auf gleiche Weise den Rest der Liste auszugeben.

Jedesmal wird der Knoten (bzw. eine "Referenz" darauf) und der Unterbrechungspunkt auf den Stack geschoben.

Der To-Do-Stapel wird also immer höher.

Glücklicherweise endet das, sobald kein Knoten mehr da ist, der auszugeben ist.

Dann wird der To-Do-Stapel rückwärts abgearbeitet.

-----

Stell dir einen Stapel Spielkarten vor.

Vorwärts ausgeben wäre, du nimmst immer die oberste Karte vom Stapel und nennst ihren Wert. (Danach wird sie verworfen, auf einen anderen Stapel gelegt oder was auch immer.)

Was du hier machst: du nimmst immer die oberste Karte vom Stapel und legst sie oben auf einen zweiten Stapel. So lange, bis der erste Stapel leer ist.

Dann fängst du an, jeweils die oberste Karte vom zweiten Stapel vorzulesen. (Und legst sie dann oben auf den ersten Stapel zurück, um den Stack von Java einigermaßen ins Bild zu übertragen.)

-----

Der Computer hat hier also ziemlich zu ackern, was den Stack betrifft. Wenn die Liste lang genug ist, kann es passieren, dass der Stapel "überläuft". Das erzeugt dann eine Stack Overflow Exception.

Deshalb vermeidet man solche Konstrukte nach Möglichkeit - außer in Lernaufgaben zur Rekursion.

-----

Ansonsten kann ich mich nur der Empfehlung von Dultus anschließen - schau dir bei einer Schritt-für-Schritt-Ausführung an, was wann wo drin steht.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

TripleBinary 
Fragesteller
 21.06.2022, 20:08

Ahhhhhhh Bing, es macht Sinn, wenn es alle nur so erklären könnten. Danke 🙏🏽

0