Insert()

Easyik

Mitglied
Hey zusammen,

ich hätte mal eine frage bezüglich der insert-Methode.
Und zwar geht es dadrum einen Knoten innerhalb eines Baumes einzufügen, der sich ja nach links oder rechts aufteilt.
Beabsichtigt ist das wenn der linke Zweig bereits besetzt ist aber anhand eines bestimmten Faktors, in diesem Fall ein int-Wert, diesen an das nachfolgende Element links anzuhängen.
Jedoch komme ich nicht dadrauf wie ich das folgende Element ansprechen kann.

Java:
public void insert(Knoten beispielKnoten){
        if(links==null && beispielKnoten.status==0)
        {
            links=beispielKnoten;
        }else if(links!=null && beispielKnoten==0){
            // hier bleibe ich gerade hängen
        }
    }
 
K

kneitzel

Gast
Also so ganz scheint es mir, als ob Du uns wichtige Informationen nicht gibst:
- Was soll status in Knoten sein? Das scheint ja eine Rolle zu spielen.
- Im zweiten if scheint dann wohl ein .status zu fehlen, denn Du wirst da wohl kaum eine Instanz eines Konten mit 0 vergleichen können.

Ansonsten ist die Herangehensweise immer gleich: Spiel es selbst mit Stift und Papier durch! Sowas muss man nicht im Kopf auf magische Weise lösen um dann direkt den Code hin zu schreiben. Und dann erst einmal in Worten beschreiben, was genau getan werden muss.
 

Easyik

Mitglied
Also so ganz scheint es mir, als ob Du uns wichtige Informationen nicht gibst:
- Was soll status in Knoten sein? Das scheint ja eine Rolle zu spielen.
- Im zweiten if scheint dann wohl ein .status zu fehlen, denn Du wirst da wohl kaum eine Instanz eines Konten mit 0 vergleichen können.

Ansonsten ist die Herangehensweise immer gleich: Spiel es selbst mit Stift und Papier durch! Sowas muss man nicht im Kopf auf magische Weise lösen um dann direkt den Code hin zu schreiben. Und dann erst einmal in Worten beschreiben, was genau getan werden muss.
-Das mit .status hatte an der Stelle gefehlt

um meine Frage etwas zu verdeutlichen:

[wurzel]-->[links]-->[weiteresLinks] (so in etwas habe ich mit den linke Zweig vorgestellt)

es soll ja überprüft werden ob die "wurzel" links einen Eintrag besitzt, falls dies "wahr" ist soll nachgeschaut werden, ob dieses Element "links" ein weiteres Element besitzt.
Falls dies nicht der Fall ist soll da ein Element eingefügt werden.

Nun die Frage: wie Spreche ich "links" am besten an
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Du sprichst das ja schon an: In dem Code, den Du geteilt hast, sieht man ja die Variable links. Das dürfte die Instanzvariable für den linken Teilbaum sein.

Und da wird es dann ja wieder ein links geben.

Und generell gibt es zwei Wege, wie man vorgehen kann. Dazu verwende ich einfach einmal das Beispiel: Durch den Zug nach hinten gehen (ans Ende gehen):
a) Rekursiv:
ans Ende gehen:
- Wenn am Waggon noch ein Waggon hängt: nächster Waggon - gehe ans Ende <-- Rekursiver Aufruf
- sonst: fertig

b) iterativ mit einer Hilfsvariable:
temp Variable ist der aktuelle Waggon.
So lange temp.nächster nicht null ist: temp = temp.nächster

Beides lässt sich auf dein aktuelles Problem adaptieren.
 

Easyik

Mitglied
So ein kleines Update zur Methode:

Java:
public void insert(String eingabe, int status){
        if(links==null){
            Knoten root  = new Knoten(eingabe,status);
            links=root;
        }else if(links!=null){
            links.links=new Knoten(eingabe,status);
        }
    }

- jedoch wird diesmal die dritte Eingabe von der vierten Eingabe überspeichert -.-

kann mir jemand sagen wo der Fehler liegt
 
K

kneitzel

Gast
Du prüfst nicht, ob links.links "leer" ist.

Daher: mal dir die Fälle auf und überlege einfach einmal, wie Du vorgehen musst.

Sprich: Stift und Zettel. Am Anfang hast Du einen leeren Knoten. Dann kommt der erste Insert, links ist noch leer, also kommt da der Knoten hin. Und dann immer weiter.

Wenn Du es durchspielst, dann solltest Du ein universelles Vorgehen finden. Zumal du zwei mögliche Vorgehen auch schon bekommen hast.
 

Easyik

Mitglied
Du prüfst nicht, ob links.links "leer" ist.

Daher: mal dir die Fälle auf und überlege einfach einmal, wie Du vorgehen musst.

Sprich: Stift und Zettel. Am Anfang hast Du einen leeren Knoten. Dann kommt der erste Insert, links ist noch leer, also kommt da der Knoten hin. Und dann immer weiter.

Wenn Du es durchspielst, dann solltest Du ein universelles Vorgehen finden. Zumal du zwei mögliche Vorgehen auch schon bekommen hast.
Habe es jetzt mit schleifen versucht bin aber nach wie vor nicht schlauer geworden 🙃
Könnte ich eventuell noch einen Tipp haben bitte
 
K

kneitzel

Gast
Wenn Du es mit einer Schleife machen willst, dann wäre das die Methode, die ich mit iterativ beschrieben habe:
temp Variable ist der aktuelle Waggon.
So lange temp.nächster nicht null ist: temp = temp.nächster
Jetzt müsste man nur schauen, was wäre bei Dir der Gegenpart von einem Waggon? Das bedeutet bei Dir "nächster Waggon". Dann kannst Du es direkt 1:1 so abbilden.

Wichtig ist: Du brauchst die Hilfsvariable, mit dieser läufst Du durch, bis Du ein Element gefunden hast, das eine bestimmte Bedingung erfüllt und schon kannst du dann auf diesem Element etwas machen.
 

Easyik

Mitglied
Wenn Du es mit einer Schleife machen willst, dann wäre das die Methode, die ich mit iterativ beschrieben habe:

Jetzt müsste man nur schauen, was wäre bei Dir der Gegenpart von einem Waggon? Das bedeutet bei Dir "nächster Waggon". Dann kannst Du es direkt 1:1 so abbilden.

Wichtig ist: Du brauchst die Hilfsvariable, mit dieser läufst Du durch, bis Du ein Element gefunden hast, das eine bestimmte Bedingung erfüllt und schon kannst du dann auf diesem Element etwas machen.
würde das gerne Rekusiv hinkriegen habe und habe wie empfohlen mich hingesetzt und es aufgezeichnet.

Am ende komme ich entweder bei einem endlosen Selbstaufruf raus oder bei einer endlosen Aneinanderreihung von links.links.links......
Java:
public void insert(String eingabe, int status){
    if(links==null){
        Knoten root  = new Knoten(eingabe,status);
        links=root;
    }else if(links!=null){

        if(links.links==null){
            links.links=new Knoten(eingabe,status);
                
        }else if(links.links.links==null){
            links.links.links=new Knoten(eingabe,status);//// und so weiter
        }
    }
    
}

Ich bräuchte einen Basisfall um die Rekursion irgendwann abbrechen zu lassen, komme allerdings auf keine Sinnvolle Idee :)
 
K

kneitzel

Gast
Da ist doch jetzt keine Rekursion. Rekursion ist, wenn eine Methode sich selbst (ggf. indirekt) aufruft.

Die Formulierung dazu wäre:
Insert auf einem Knoten:
- Link frei? Dann: Links setzen und fertig (==> Abbruchbedingung - dieses ist ein wichtiger Punkt bei Rekursion)
- Sonst: auf linkem Knoten insert (rekursiv) aufrufen. (==> Rekursiver Aufruf)
 

Easyik

Mitglied
Da ist doch jetzt keine Rekursion. Rekursion ist, wenn eine Methode sich selbst (ggf. indirekt) aufruft.

Die Formulierung dazu wäre:
Insert auf einem Knoten:
- Link frei? Dann: Links setzen und fertig (==> Abbruchbedingung - dieses ist ein wichtiger Punkt bei Rekursion)
- Sonst: auf linkem Knoten insert (rekursiv) aufrufen. (==> Rekursiver Aufruf)
hatte die Rekursion wieder raus genommen um zu zeigen worauf ich hinaus will XD
 

Easyik

Mitglied
[CODE lang="java" title="Mission completed"]public void insert(String eingabe, int status){
if(links==null){
links = new Knoten(eingabe,status);

}else if(links!=null){

links.insert(eingabe, status);;
}[/CODE]
 
K

kneitzel

Gast
Das sieht doch schon super aus.

Nur ein Hinweis: Das zweite if brauchst Du nicht mehr. Es gibt ja nur zwei Möglichkeiten: Entweder links ist null oder es ist eben nicht null.
Daher reicht das erste if zusammen mit dem Else.

Das ist also so wie bei Gesprächen: "Gehst Du heute Abend mit ins Kino?"
Wenn Du da nein sagst, dann ist ja klar: Du kommst nicht mit ins Kino, daher muss ich nicht noch einmal fragen: "Gehst Du heute Abend nicht mit ins Kino?"
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
M AutoID auslesen nach INSERT Java Basics - Anfänger-Themen 8
I Problem mit H2-DB Insert-Statement Java Basics - Anfänger-Themen 3
K Problem mit h2 DB Insert Befehl Java Basics - Anfänger-Themen 6
C SELECT klappt INSERT klappt nicht!!!??? Java Basics - Anfänger-Themen 3
M Nodes/LinkedList und insert funzt net Java Basics - Anfänger-Themen 9
V Problem mit Insert-Methode des Binärbaums Java Basics - Anfänger-Themen 4
M Insert into klappt nicht? Java Basics - Anfänger-Themen 7
V Insert into klappt nicht so ganz Java Basics - Anfänger-Themen 6
W sql "Insert into" funktioniert nicht Java Basics - Anfänger-Themen 5
I JTextArea insert Methode Java Basics - Anfänger-Themen 5
L INSERT Statement geht nicht HILFE! Java Basics - Anfänger-Themen 2
L hsqldb INSERT - Unexpected token Java Basics - Anfänger-Themen 2
T Insert befehl geht nicht Java Basics - Anfänger-Themen 15
G String.insert an unbekannter Stelle Java Basics - Anfänger-Themen 5
S Listen - insert - print etc. Dringend! Bitte! Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben