Eccezione in filetto java.lang.ClassCastException "main":

voti
0

Sono stato con un pilota per testare una delle mie strutture di dati (Binary Search Tree) e mi sono imbattuto in questo problema. -E succede quando inserisco più di 2 oggetti in BST -Che che sto cercando di fare: io sto inserendo 4 oggetti nell'albero, allora sto cancellando 2 oggetti, e quindi la stampa fuori il mio metodo find in modo da visualizzare o non ha trovato gli oggetti chiedo. per esempio:

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));

Ricevo questo errore quando l'eseguo:

Eccezione nel thread main java.lang.ClassCastException: TreeNode non può essere lanciato a java.lang.Comparable a BinarySearchTree2.delete (BinarySearchTree2.java:83) a Driver5.main (Driver5.java:36)

che poi indica il metodo di eliminazione nella mia classe BST che è:

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'errore punta direttamente a questa linea nel mio metodo delete:

nd.setItem((E)nd.getRight());
È pubblicato 17/09/2010 alle 06:30
fonte dall'utente
In altre lingue...                            


1 risposte

voti
2

Credo che la vostra dichiarazione di E è "E si estende Comaprable", in questo caso, quando hai chiamato nd.getRighttornò esempio TreeNode che deve essere comparabile per il cast per avere successo.

La linea in cui è verificata l'eccezione dovrebbe essere simile di seguito per il cast di passare

nd.setItem(nd.getRight.getItem)
Risposto il 17/09/2010 a 06:38
fonte dall'utente

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