Rekursiver Methodenaufruf funktioniert nicht

target2804

Mitglied
Hallo liebes Forum,

hab mich bzgl. meines Problems extra hier angemeldet, also verzeiht mir, wenn ich evt. nicht direkt das richtige Unterforum getroffen habe, oder meine Frage sich in irgendeiner weise als unsinnig rausstellen sollte.

Mein Problem ist folgendes: Ich erstellte eine Klasse Tree, die die typischen Methoden Insert, remove, getLeft, getRight, etc. hat.
Nun sollte ich die Methode getDepth (in unserer Aufgabe sollte die Methode "tiefe" heißen und da der Prof immer Punkte abzieht, wenn etwas nicht so ist wie er will, heißt die Methode halt so) implementieren. Hab auch schon einen Lösungsansatz, aber der rekursive Methodenaufruf klappt einfach nicht.
Ich verstehe nicht, was hier falsch sein soll. Kann mir bitte jemand weiterhelfen? Im Anhang der Auszug. Wir lernen übrigens mit BlueJ...

Hier im Bild sieht man wo der Compiler den Fehler sieht:
Bildschirmfoto 2015-11-30 um 00.09.34.png


Hier nochmal der Code an sich:
Java:
//get-Methoden
    public String getContent(){
        return content;
    }

    public Tree getLeft() {
        return left;
    }

    public Tree getRight(){
        return right;
    }

    public int getAnzahl(){
        int anz = 1;
        if(getLeft()!=null)anz = anz + getLeft().getAnzahl();
        if(getRight()!=null)anz = anz + getRight().getAnzahl();
        return anz;
    }

    public int tiefe(){
        int tiefeL = 0;
        int tiefeR = 0;
        if(getLeft() != null) tiefeL = getLeft().tiefe();
        if(getRight() != null)tiefeR = getRight().tiefe();
        if(tiefeL>tiefeR) return tiefeL;
        else return tiefeR;
    
    }
 
Zuletzt bearbeitet:
Poste doch mal den ganzen Tree code oder noch besser alles, damit wir das auch mal laufen lassen können.
 
Java:
public class Tree2{
    private String content;
    private Tree left;
    private Tree right;
    private String text;
   
    //Konstruktoren
    public Tree2(String content, Tree left, Tree right){
        this.content = content;
        this.left = left;
        this.right = right;
    }
   
    public Tree2(String content){
        this(content,null,null);
    }
   
   
   
    //get-Methoden
    public String getContent(){
        return content;
    }
   
    public Tree getLeft() {
        return left;
    }
   
    public Tree getRight(){
        return right;
    }
   
    public int getAnzahl(){
        int anz = 1;
        if(getLeft()!=null)anz = anz + getLeft().getAnzahl();
        if(getRight()!=null)anz = anz + getRight().getAnzahl();
        return anz;
    }
   
    public int tiefe(){
        int tiefeL = 0;
        int tiefeR = 0;
        int depth;
        if(getLeft() != null) tiefeL = tiefeL + getLeft().tiefe();
        if(getRight() != null)tiefeR = getRight().tiefe();
        if(tiefeL>tiefeR) depth = tiefeL; 
        else depth = tiefeR;
        return depth;
    }
   
   
   
    //set-Methoden
    public void setContent(String x){
        content = x;
    }
   
    public void setLeft(Tree tree){
        left = tree;
    }
   
    public void setRight(Tree tree){
        right = tree;
    }
   
    public void fuegeEinSortiert(String newContent){
        if(newContent.compareTo(content)<0){
           
            if(getLeft() == null){
                Tree newTree = new Tree(newContent);
                setLeft(newTree);
            }
            else getLeft().fuegeEinSortiert(newContent);
        }
           
        else{
               
            if(getRight() == null){
                Tree newTree = new Tree(newContent);
                setRight(newTree);
            }
            else getRight().fuegeEinSortiert(newContent);
        }
    }
   
    //Ausgabe LWR
    public String ausgabeLWR(){
        String s="";
        if(getLeft()!=null) {
            s += getLeft().ausgabeLWR();
        }
        s += " "+getContent();
        if(getRight()!=null){
            s += getRight().ausgabeLWR();
        }
        return s;
    }
   
    private void showBranches(int level) {
        LineIO io = new LineIO();
        if (getRight()!=null) getRight().showBranches(level+1);
        for(int i=0; i<level;i++) io.write("      "); io.writeln("+-> "+getContent());
        if (getLeft()!=null) getLeft().showBranches(level+1);
    }//showBranches 

    public void ausgabe() { 
        this.showBranches(0);
    }
}

Das ist mein ganzer Code...
 
Dein Baum hat den Typ Tree2, deine left und right Unterbäume aber den Typ Tree. Da stimmt also irgendwas nicht. Anscheinend gibt es die Klasse oder das Interface Tree, sonst würde es früher ein Fehler geben. Wie sieht denn Tree aus?

lg Kevin
 
Spontan fällt auf, dass du einmal Tree2 benutzt und einmal Tree. Außerdem hast du den Fehler, den Thallius angemerkt hat, noch nicht ausgebessert.
 
hab den Fehler gefunden...
so muss es aussehen, dann passt es.
Fehler war, dass ich ... getLeft().tiefe(); geschrieben hatte. das funktioniert aber nicht. es muss left.tiefe() heißen und in der Bedingung der if Anweisung muss auch if(left.... statt getLeft() stehen..

Bildschirmfoto 2015-11-30 um 13.40.23.png

das mit Tree2 war nur, weil ich die Klasse Tree schonmal hatte und meinen Code, den ich bearbeite, gern in einer anderen Klasse zur Absicherung absichere.
 

Zurück
Oben