Exception dans le thread "principal" java.lang.ClassCastException:

voix
0

J'utilise un pilote pour tester un de mes structures de données (Binary arbre de recherche) et je suis tombé sur cette question. -Il arrive lorsque j'insère plus de 2 objets dans le bst -Ce que je suis en train de faire: je 4 objets dans l'insertion de l'arbre, puis je supprime 2 objets, puis imprimer ma méthode de recherche afin qu'il affiche si pas trouvé les objets que je demande. par exemple:

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.delete (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));
        }    

}

l'erreur pointe directement à cette ligne dans ma méthode de suppression:

nd.setItem((E)nd.getRight());
Créé 17/09/2010 à 06:30
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je suppose que votre déclaration de E est « E étend Comaprable », dans ce cas , lorsque vous avez appelé , nd.getRightil 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 la distribution de passer

nd.setItem(nd.getRight.getItem)
Créé 17/09/2010 à 06:38
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more