Code erläutern

H

Heyoka955

Gast
Hallo Leute, kann mir eine rerklären was der Code genau macht? also am besten schrit für schritt di Befehle Anweisungen erläutern.
 

Anhänge

  • bäume.png
    bäume.png
    200,5 KB · Aufrufe: 71

temi

Top Contributor
Das sind ja jetzt so grundlegende Anweisungen, dass du das selbst können solltest. Ich schlage vor, du schreibst deine Lösung mal hier hin, dann können wir uns gerne darauf beziehen.
 
H

Heyoka955

Gast
also wie ich das verstanden habe ist, dass man die Reihenfolge der Bäume als String ausgeben will un ddas rekursiv also ma guckt, ob links ein knoten vorhanden ist dann wiederuft er die Methode wieder auf solange bisdie Referenz auf null zeigt und nachdem die If bedinung nicht mehr gilt wird s = 8 nacher springt er in die nächste If Bedingung fragt ob ab dem Knoten von 8 rechts sich was befindet, nachdem da sich nix mehr befindert returnt er die 8 aber was macht er danach?
 

mihe7

Top Contributor
Es wird "8 " zurückgegeben und Du landest dort, wo zuvor die Methode aufgerufen wurde, d. h. im Knoten "5" in der Zeile s=s+left.toString() und zwar, nachdem left.toString() eben "8 " zurückgeliefert hat. Dann geht es weiter: s=s + "8 " wird zu s=""+"8 "="8 " ausgewertet.
Anschließend wir s = s + element + " " zu s = "8 " + "5" + " " = "8 5 " ausgewertet. Dann wird geschaut, ob ein rechter Knoten existiert. Da dies der Fall ist, wird jetzt s=s + right.toString() ausgeführt, d. h. zuerst right.toString() (-> liefert "12 ") und anschließend s = s + "12 ", also s="8 5 12 ". Das wird dann zurückgegeben.

Jetzt bist Du dort, wo die toString-Methode für Knoten 5 aufgerufen wurde, also im Knoten 19 in der Zeile s=s+left.toString(). Das left.toString() hat "8 5 12 " zurückgegeben, somit wird s = s + left.toString() zu s = "" + "8 5 12 " = "8 5 12 " ausgewertet.

Es folgt s = s + element + " ", also s = "8 5 12 " + "19" + " " = "8 5 12 19 ".

Jetzt wird wieder geschaut, ob ein rechter Knoten existiert. Da dies der Fall ist, wird jetzt s = s + right.toString() ausgeführt, zuerst wieder right.toString().

Usw.

Nachtrag: probier das Spiel mal gedanklich weiter zu spielen, wenn Du dem Knoten 199 noch einen linken Knoten hinzufügst.
 
H

Heyoka955

Gast
Es wird "8 " zurückgegeben und Du landest dort, wo zuvor die Methode aufgerufen wurde, d. h. im Knoten "5" in der Zeile s=s+left.toString() und zwar, nachdem left.toString() eben "8 " zurückgeliefert hat. Dann geht es weiter: s=s + "8 " wird zu s=""+"8 "="8 " ausgewertet.
Anschließend wir s = s + element + " " zu s = "8 " + "5" + " " = "8 5 " ausgewertet. Dann wird geschaut, ob ein rechter Knoten existiert. Da dies der Fall ist, wird jetzt s=s + right.toString() ausgeführt, d. h. zuerst right.toString() (-> liefert "12 ") und anschließend s = s + "12 ", also s="8 5 12 ". Das wird dann zurückgegeben.

Jetzt bist Du dort, wo die toString-Methode für Knoten 5 aufgerufen wurde, also im Knoten 19 in der Zeile s=s+left.toString(). Das left.toString() hat "8 5 12 " zurückgegeben, somit wird s = s + left.toString() zu s = "" + "8 5 12 " = "8 5 12 " ausgewertet.

Es folgt s = s + element + " ", also s = "8 5 12 " + "19" + " " = "8 5 12 19 ".

Jetzt wird wieder geschaut, ob ein rechter Knoten existiert. Da dies der Fall ist, wird jetzt s = s + right.toString() ausgeführt, zuerst wieder right.toString().

Usw.

Nachtrag: probier das Spiel mal gedanklich weiter zu spielen, wenn Du dem Knoten 199 noch einen linken Knoten hinzufügst.
kannst du das nochmal schritt für schritt erklären? habe es fast verstanden.
 
H

Heyoka955

Gast
s=s + "8 " wird zu s=""+"8 "="8 ", meine frage wäre noch ob dieser schritt nicht voher ausgeführt wird bevor die 8 returned wird ?
 

mihe7

Top Contributor
Die Anweisung s = s + left.toString() kannst Du Dir so vorstellen:
Code:
String tmp = left.toString();
s = s + tmp;
Zuerst wird left.toString() ausgeführt, das liefert dann die "8 " zurück und anschließend wird die "8 " an die Zeichenkette s angehängt.
 
H

Heyoka955

Gast
aber der
Die Anweisung s = s + left.toString() kannst Du Dir so vorstellen:
Code:
String tmp = left.toString();
s = s + tmp;
Zuerst wird left.toString() ausgeführt, das liefert dann die "8 " zurück und anschließend wird die "8 " an die Zeichenkette s angehängt.
aber der return kommt nach s = s + element ? man geht ja sequentiel vor ?
 

mihe7

Top Contributor
Du machst Dir das alles viel zu kompliziert. Ein rekursiver Methodenaufruf funktioniert genauso wie jeder andere Aufruf auch.

Stell Dir mal vor, left und right wären Referenzen auf z. B. Strings. Was würde dann passieren?
 
H

Heyoka955

Gast
der würde saegn wir left wäre ein string würde dann en string anstelle von knoten stehen also wäre
s = s + String also die referenz
 
H

Heyoka955

Gast
das mit dem Methoden aufrig verstehe ich also man kann sich das als eine Methoden aufruf vorstellen das sich selber aufruft aber in meinem Beispiel wird doch erst s ausfegührt bevor returned wird ?
 

mihe7

Top Contributor
Nochmal langsam:
Java:
public void toString() {
    String s = "";
    if (x != null) {
        s = s + x.toString();
    }
    s = s + "# ";
    return s;
}
Wenn x nun ein String wäre, sagen wir mal "S", dann würdest Du doch einfach der Reihe nach durchgehen:
1. s := ""
2. "S" != null, also wird der then-Zweig ausgeführt
3. Methode toString() von x wird aufgerufen, die liefert "S"
4. s := s + x.toString() -> s := s + "S", also s := "S"
5. then-Zweig durch, als nächstes kommt s: = s + "# " -> s := "S" + "# " -> s := "S# "
6. s zurückgeben, also Rückgabe ist "S# "

Soweit verstanden?
 
H

Heyoka955

Gast
Nochmal langsam:
Java:
public void toString() {
    String s = "";
    if (x != null) {
        s = s + x.toString();
    }
    s = s + "# ";
    return s;
}
Wenn x nun ein String wäre, sagen wir mal "S", dann würdest Du doch einfach der Reihe nach durchgehen:
1. s := ""
2. "S" != null, also wird der then-Zweig ausgeführt
3. Methode toString() von x wird aufgerufen, die liefert "S"
4. s := s + x.toString() -> s := s + "S", also s := "S"
5. then-Zweig durch, als nächstes kommt s: = s + "# " -> s := "S" + "# " -> s := "S# "
6. s zurückgeben, also Rückgabe ist "S# "

Soweit verstanden?
wieso gibt s wieder anstelle ? der muss doch erst dadurch gehen durch die abfragen ?
 
H

Heyoka955

Gast
der muss doch wieder durch die abfragen durch wenn er the mthode in schritt drei aufruft?
 

mihe7

Top Contributor
Ja verstanden aber wie wäre es in dem Code oben ?
In dem Code oben ist x ein String -> nix Rekursion.

Im Schritt 3 wird die Ausführung der aktuellen Methode "unterbrochen", um die toString()-Methode auszuführen. Diese kehrt irgendwann mit einem Ergebnis (in dem Fall dem String selbst) zurück. Dann ist die Unterbrechung beendet und es wird bei Schritt 4 weitergemacht.

Ist das verstanden?
 
H

Heyoka955

Gast
In dem Code oben ist x ein String -> nix Rekursion.

Im Schritt 3 wird die Ausführung der aktuellen Methode "unterbrochen", um die toString()-Methode auszuführen. Diese kehrt irgendwann mit einem Ergebnis (in dem Fall dem String selbst) zurück. Dann ist die Unterbrechung beendet und es wird bei Schritt 4 weitergemacht.

Ist das verstanden?
Aber dann würde er sich doch ganze Zeit aufrufen ansattt dass S returned wird da die if bedinung in deinem Falle nie ungleich null ist, weil da immer ein wert ist ?
 

mihe7

Top Contributor
Wir rufen aktuell die Methode einer völlig anderen Klasse auf. Schau Dir mal das Bild an.
 

Anhänge

  • beispiel1.png
    beispiel1.png
    6,3 KB · Aufrufe: 30

mihe7

Top Contributor
Ja, im Beispiel schon. Soweit sind wir aber noch nicht. Du musst erstmal verstehen, dass bei einem Methodenaufruf die aktuelle Methode unterbrochen wird, die aufgerufene Methode ausgeführt, und anschließend die aktuelle Methode fortgesetzt wird. Schau Dir dazu das Bild oben an.
 
H

Heyoka955

Gast
Ja das wusste ich schon. Also das weiß ich aber im Beispiel ist das ein rekursiver Aufruf mit toString und meine frage wäre wenn das Programm die rekursive Methode aufruft muss er nicht durch alle Anfragen wieder durch bevor er den wirklichen Wert returned.
 
H

Heyoka955

Gast
Also sprich er ist bei tostring und ruft sich dann selber auf dann heißt es ja dass er wieder die if abfrage macht und da die beim zweiten Aufruf wieder gilt macht er es solange bis dies nicht mehr gilt und dann gibt er die Werte raus also die Werte im linken teilbaum?
 

mihe7

Top Contributor
Also das weiß ich aber im Beispiel ist das ein rekursiver Aufruf mit toString und meine frage wäre wenn das Programm die rekursive Methode aufruft muss er nicht durch alle Anfragen wieder durch bevor er den wirklichen Wert returned.

Doch, selbstverständlich. Nimm mal einen einfachen Baum
Code:
    19
   /  \
  5   25
Du rufst für 19 die toString()-Methode auf. Dieser Knoten hat einen linken Teilbaum, also wird für diesen die toString()-Methode aufgerufen; der toString()-Aufruf für 19 wird also an der aktuellen Stelle unterbrochen.

Jetzt sind wir im toString()-Aufruf für Knoten 5. Der hat keinen linken Teilbaum. Also wird als nächstes s = s + "5" + " " ausgeführt. Der Knoten hat auch keinen rechten Teilbaum, also wird einfach s (und damit "5 ") zurückgegeben.

Wir sind jetzt wieder in der toString()-Methode von Knoten 19, die wird nun an der Stelle fortgesetzt, wo sie unterbrochen wurde. Vom linken Teilbaum hat der Knoten 19 jetzt "5 " erhalten. Dieser String wird zu s hinzugefügt. Damit und erst damit ist die Zeile s = s + links.toString() abgeschlossen.

Weiter gehts: s = s + element + " ", also wird "19 " zu s hinzugefügt, s ist damit "5 19 ".

19 hat nun einen rechten Teilbaum, also wird für diesen die toString()-Methode aufgerufen; der toString()-Aufruf für 19 wird also an der aktuellen Stelle unterbrochen.

Jetzt sind wir im toString()-Aufruf für Knoten 25. Der hat keinen linken Teilbaum. Also wird als nächstes s = s + "25" + " " ausgeführt. Der Knoten hat auch keinen rechten Teilbaum, also wird einfach s (und damit "25 ") zurückgegeben.

Wir sind jetzt wieder in der toString()-Methode von Knoten 19, die wird nun an der Stelle fortgesetzt, wo sie unterbrochen wurde. Vom rechten Teilbaum hat der Knoten 19 jetzt "25 " erhalten. Dieser String wird zu s hinzugefügt, damit ist s = "5 19 25 ", und das wird von der toString()-Methode des Knoten 19 zurückgegeben.
 
H

Heyoka955

Gast
Also wir haben unser Beispiel, im ersten Durchgang guckt er erstmal nach ob man nach links gehen knn von Wurzel aus, da es möglich ist ruft er die rekursive Methode auf und befindet sich im Knoten darunter dann befindet er sich in der rekursivem Methode und macht die if abfrage von neu und da die im Beispiel wieder erfüllt ish ruft er wieder rekursive Methode auf und der Knoten befindet sich eine darunter und dies macht er solange weiter bis es keine unteren linken Knoten gibt und dann return er alles Knoten die er durchgegangen ist in meinem Fall.
 

mihe7

Top Contributor
Hier mal eine rekursive Methode, die ganz ohne Objekte auskommt; vielleicht wird es dann einfacher:
Java:
public static int fak(int n) {
    if (n == 0) { 
        return 1; 
    }
    int tmp = fak(n-1);
    int prod = n * tmp;
    return prod;
}
 
H

Heyoka955

Gast
Ja stimmt
Das ist falsch oder zumindest ungenau formuliert.

Wenn es keine weiteren Knoten mehr gibt, dann returned er mit dem Wert dieses letzten Knotens an die Aufrufstelle für diesen Knoten zurück.
stimmt hatte ich verpeilt der geht weiter hoch. Meine Frage war nur ob er in der aufgeruften rekursivem Methode wieder die abfragen durch macht.
 
H

Heyoka955

Gast
Ja stimmt
stimmt hatte ich verpeilt der geht weiter hoch. Meine Frage war nur ob er in der aufgeruften rekursivem Methode wieder die abfragen durch macht.
Meine Frage war mir dass bevor er den letzten Knoten returned in teilnaum ob er alles wieder sequentiell durchgehen muss wenn er die Methode aufruft.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N SelectionSort ; Code erläutern Java Basics - Anfänger-Themen 13
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben