wieso macht java nicht call by reference?

Simor146  04.08.2023, 18:43

Das sollte by-Reference sein. Woran machst du fest, das es das nicht ist? Wie sieht TNode aus?

DavidGoggins 
Fragesteller
 04.08.2023, 18:48

weil es nicht funktioniert

2 Antworten

Java macht ansich calll by reference, Dein Entwurf ist aber auch ein wenig umständlich und 'nasty'

    public void add(int data){
        add(int data, root)
    }
    public void add(int data, TNode current){
       if (current==null){
          current=new TNode (data);
          return;
       }
       // Gleichheit sollte getrentn behandelt werden.
       if (data < current.data) add (data, current.left);
       else add (data, current.right);
       return;
   }

So sollte das strukturell eher aussehen, wobei hier rekursiv gearbeitet wird, man kann das aber genauso gut iterativ ganz ähnlich umsetzen.

P.S.: Du wirst vielleicht im Laufe der weiteren Implementierung merken, daß der Abstieg genauso wie bei der Suche abläuft, sodaß Du ggf. das add über die Nutzung der Suche implementierst.

DavidGoggins 
Fragesteller
 04.08.2023, 21:17

wieso funktioniert dein code aber meiner nicht, da wird ja auch nichts zurückgegeben, und du machst dann ja auch current = new TNode(data);

0

Du musst dir das so vorstellen, du hast deine TNode irgendwo im Speicher und dein Programm hat eine Referenz auf dieses Objekt. Wenn du jetzt die Referenz als Argument in eine methode passed, wird eine neue Referenz kreiert die aber auf das selbe Objekt zeigt.

Das heißt wenn du ein neues Objekt erstellt und deine zweite Referenz darauf zeigen lässt, dann verändert sich nichts and deinem orginalen Objekt, und deine erste Referenz zeigt immer noch auf es.

Das heißt der Code im else Block ist fein bei der zweiten überladung von "add()" , aber nicht die Zuweisung "patent = new TNode(data) ;" .

Woher ich das weiß:Hobby
DavidGoggins 
Fragesteller
 04.08.2023, 19:16

in C hat das aber so ja funktoiniert, wieso hier nicht?

0
EnderLuca  04.08.2023, 19:42
@DavidGoggins

In C würde es nur funktionieren wenn du einen double pointer, also z.B "int **" benutzt. In Java ist es nicht möglich eine Reference by Reference zu passen.

Das hat aber ein anderer Nutzer dir vor ca. 3 Stunden auch geschrieben, in einer Antwort auf quasi die gleiche Frage.

0