Исключение в потоке «основного» java.lang.ClassCastException:

голоса
0

Я использую драйвер, чтобы проверить один из моих структур данных (бинарное дерево поиска), и я наткнулся на этой проблеме. -Это происходит, когда я ввожу более 2-х предметы в BST-я пытаюсь сделать: Я вставив 4 объекта в дерево, то я удаление 2 объектов, а затем распечатайте мой метод найти, чтобы он отображал ли не он нашел объекты прошу. например:

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

Я получаю эту ошибку, когда я запустить его:

Исключение в потоке «основного» java.lang.ClassCastException: TreeNode не может быть приведен к java.lang.Comparable на BinarySearchTree2.delete (BinarySearchTree2.java:83) в Driver5.main (Driver5.java:36)

который затем указывает на удаление метода в моем классе BST, который:

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

}

ошибка указывает непосредственно на этой линии в моем методе удаления:

nd.setItem((E)nd.getRight());
Задан 17/09/2010 в 06:30
источник пользователем
На других языках...                            


1 ответов

голоса
2

Я предполагаю , что ваша декларация Е «Е распространяется Comaprable», в том случае , когда вы назвали nd.getRightвернулись TreeNode экземпляра , который должен быть сопоставимыми для броска , чтобы добиться успеха.

Линия, где исключение произошло должно выглядеть, как показано ниже на актерский, чтобы пройти

nd.setItem(nd.getRight.getItem)
Ответил 17/09/2010 в 06:38
источник пользователем

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