2016-12-08 3 views
1

Ich möchte einen Pokemon-Typ (Name + Nummer) zu einem binären Suchbaum hinzufügen. Hier ist meine BinarySearchClass.Operator ungültig für Klassenarten

public void insert(Pokemon n) { // n is data/key 
    Node newNode = new Node(n); 
    if (root == null) { // empty tree 
     root = newNode; 
    } else { 
     Node current = root; 
     Node parent = null; 
     boolean flag = true; 
     while (flag) { 
      parent = current; 
      if (n < current.data) { 
       current = current.left; 
       if (current == null) { 
        parent.left = newNode; 
        flag = false; 
       } 
      } // if(n < current.data) 
      else { 
       current = current.right; 
       if (current == null) { 
        parent.right = newNode; 
        flag = false; 
       } // current == null} 
      } // else} 
     } // while(flag) 
    } // root != null 
} 

Der Fehler, den ich bekommen, ist an der n < current.data. Ich kann es nicht schaffen, also vergleicht es nur die Anzahl der Pokémon, wie Kadabra 64 oder Bulbsaur 1, sondern auch den gesamten Pokémon-Typ. Muss ich getNumber() in meiner Pokemon-Konstruktorklasse verwenden? Mit diesem Testfahrer Code:

BinarySearchTree T = new BinarySearchTree(); 
    for (int i = 0; i < userNumber; i++){ 
     T.insert(poke[i]); 
    } 
+0

'<' ist ein Operator verwendet, um Zahlen zu vergleichen. Ein Pokémon ist keine Nummer. Vielleicht möchten Sie n.getNumber()

+0

YES !! Ich danke dir sehr! Das war dumm von mir. –

+0

Aus diesem Grund sind sinnvolle Variablennamen eine gute Idee. 'n' ist traditionell ein numerischer Wert in der Algebra. Persönlich hätte ich die Methodensignatur als 'public void insert (Pokemon Pokemon) 'definiert. – VGR

Antwort

1

Das Problem mit

n < current.data 

ist, dass n ist kein primitiver Typ Variable. Es stellt ein Pokemon Objekt dar. Und das Ding ist: Java tut nicht Unterstützungsoperator, der für Referenztypen überlädt.

Was funktionieren würde:

n.someNumericalField < current.data 

(dass current.data unter der Annahme, auch einige primitive Art darstellen würde)

Oder vielleicht

n.lessThan(current.data) 

(wo lessThan() wäre ein Verfahren sein, dass Sie in Ihrer Pokemon-Klasse implementieren)

0

Sie versuchen, eine Pokemon mit einem Daten zu vergleichen. Sie müssen etwas tun wie:

//assuming that n.data is an integer or other comparable value 
if (n.data < current.data) 
Verwandte Themen