# Binärbaum - Klasse Knoten - Methode Suchen



## Spitzbua (9. Dez 2009)

Hallo,
ich hab ein Problem bei der Implementierung von der Methode Suchen(String suchSchlüssel)

hier ist mal der Programmcode von der Klasse KNOTEN, Problem ist makiert:

```
public class KNOTEN
{
    private DATENELEMENT daten;
    private KNOTEN linkerNachfolger;
    private KNOTEN rechterNachfolger;
     

    public KNOTEN(DATENELEMENT d)
    {
        daten = d;
        linkerNachfolger = null;
        rechterNachfolger = null;
    }   

    
    
    public DATENELEMENT Suchen(String suchSchlüssel)
    {
        if(daten.SchluesselIstGleich(suchSchlüssel))  
        {
            return daten;
        }
        else
        {
            if(suchSchlüssel < ??? )   <----- Was muss hier rein? *
            {
                if (linkerNachfolger = null)
                {
                    return linkerNachfolger.Suchen(suchSchlüssel);
                }
                else
                {
                    return null;
                }
            }
            else
            {
                if (rechterNachfolger != null)
                {
                    return rechterNachfolger.Suchen(suchSchlüssel);
                }
               return null;
            }
        }
    }  
}
```

Zeile 25 *
also im Binärbaum gibt es ja einen linkenNachfolger und rechtenNachfolger wie auch am Anfang von der Klasse implementiert wird.
Mein Problem ist jetzt, an dieser makierten Stelle muss ich eine if-Abfrage machen um festzustellen ob der gesuchte Wert (suchSchlüssel) kleiner ist als der Wert des Datenelements.

Wenn ich dann aber für "???" das Wort "daten" einsetze kommt folgende Fehlermeldung:
*"operator < cannot be applied to java.lang.String,DATENELEMENT"*

Falls man noch eine Information braucht um mir die Antwort zu geben einfach sagen.

PS: Falls jemand auch einen Fehler nach der markierten Stelle findet bitte sagen =)
Ich kenn mich noch nich so gut aus mit Java!


----------



## miwoe (9. Dez 2009)

```
public DATENELEMENT Suchen(String suchSchluessel) {
  if (daten.getSchluessel().compareTo(suchSchluessel) == 0) {
    return daten;
  }
  else if (daten.getKeyWord().compareTo(suchSchluessel) > 0) {
    return rechterNachfolger.suchen(suchSchluessel);
  }
  else {
    return linkeNachfolger.suchen(suchSchluessel);
  }
}
```

Der Code geht davon, dass die Methode getSchluessel den Wert des Key aus DATENELEMENT zurückgibt, was hoffentlich ein String ist. zu beachten ist, dass dies CASE_SENSITIVE ist.

EDIT FYI: Die compareTo-Methode ist quasi der Vergleichsoperator (neben equals()) für Objekte. <> geht nur bei numerischen Werten in Java. Anderer Sprachen unterstützen dies auch bei Zeichenketten, wobei man davon absehen muss, dass dies bei dir auch nicht funktionieren würde, da die Variable daten auf kein Objekt vom Typ String zeigt und man DATENELEMENT und String ohne einen Maßstab genauso wenig vergleichen kann, wie Äppel und Birnen.


----------



## Spitzbua (9. Dez 2009)

also muss ich statt "<" den Befehl "compare to" geben?



```
if(daten.SchluesselIstGleich().compairTo(suchSchlüssel) > 0 )
```

bei dem Teil, was muss denn da in die Klammer nach SchluesselIstGleich?!

In der Klasse DATENELEMENT sieht die methode so aus



```
public boolean SchluesselIstGleich(String s);
```


----------



## miwoe (9. Dez 2009)

Poste mal die Klasse DATENELEMENT.

Achja, und als Tipp das hier: http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html
Das hilft dir auf Dauer und diejenigen, die dir helfen wollen.


----------



## Spitzbua (9. Dez 2009)

danke!

klar doch,


```
public interface DATENELEMENT
{

    public void InformationAusgeben();
    

    public boolean SchluesselIstGleich(String s);
}
```


----------



## miwoe (9. Dez 2009)

oh, eine Schnittstelle? Was hast du dir denn dabei gedacht? Naja, gibt es denn auch irgendwas, was die Schnittstelle implementiert?

Weiterhin denke mal darüber nach, welches Datenfeld (im Prinzip können es ja auch mehrere) denn nun der Schlüssel(Identifikator) der Elemente aus deinem Baum sein soll.


----------

