2010-09-17 23 views
0

J'ai utilisé un pilote pour tester l'une de mes structures de données (Binary Search Tree) et j'ai rencontré ce problème. -Il arrive quand j'insère plus de 2 objets dans le bst -Qu'est ce que j'essaie de faire: J'insère 4 objets dans l'arborescence, puis j'enlève 2 objets, puis j'imprime ma méthode find pour qu'elle affiche si oui ou non il a trouvé les objets que je demande. par exemple:Exception dans le fil "principal" java.lang.ClassCastException:

BinarySearchTree2<Integer> theData1 = new BinarySearchTree2<Integer>(); 
    long start1 = System.currentTimeMillis(); 
    theData1.insert(c1); 
    theData1.insert(c2); 
    theData1.insert(c3); 
    theData1.delete(c2); 
    System.out.println(theData1.find(c1)); 
    System.out.println(theData1.find(c2)); 
    System.out.println(theData1.find(c3)); 
    System.out.println(theData1.find(c4)); 

Je reçois cette erreur quand je le lance:

Exception dans le thread "principal" java.lang.ClassCastException: TreeNode ne peut pas être jeté à java.lang.Comparable à BinarySearchTree2. supprimer (BinarySearchTree2.java:83) à Driver5.main (Driver5.java:36)

qui pointe alors à la méthode de suppression dans ma classe bst qui est:

public void delete(E item) { 

     TreeNode<E> nd = root; 

     while(nd != null && nd.getItem().compareTo(item) != 0) 
     { 
      if(nd.getItem().compareTo(item) < 0) 
       nd = nd.getRight(); 

      else 
       nd = nd.getLeft(); 
     } 

     if(nd.getLeft() == null && nd.getRight() == null) 
     { 
      nd = null; 
     } 

     else if(nd.getLeft() != null && nd.getRight() == null) 

     { 
      nd.setItem((E)nd.getLeft()); 

     } 
     else if(nd.getLeft() == null && nd.getRight() != null) 
     {  
      nd.setItem((E)nd.getRight()); 

     } 

     else if(nd.getLeft() != null && nd.getRight() != null) 
     { 

      nd.setItem((E)findsucc(nd)); 
     }  

} 

les points d'erreur directement à cette ligne dans ma méthode de suppression:

nd.setItem((E)nd.getRight()); 

Répondre

2

Je suppose que votre déclaration de E est « E étend Comaprable », dans ce cas, lorsque vous avez appelé nd.getRight il est revenu par exemple TreeNode qui doit être comparable pour le casting pour réussir.

La ligne où l'exception est survenue devrait ressembler ci-dessous pour le casting de passer

nd.setItem(nd.getRight.getItem) 
+0

Keshav, vous êtes tout à fait correct ... J'ai été dominant cette petite erreur pendant une heure et ne pouvait pas le comprendre . Merci beaucoup, prend tout son sens – user450267

+0

je reçois maintenant une exception de pointeur NULL comme j'entre plusieurs objets dans la BST à – user450267

+0

si (nd.getLeft() == null && nd.getRight() == null) \t \t \t { \t \t \t \t \t \t \t \t e = null; \t \t \t} – user450267