2015-04-04 6 views
0

Я написал структуру BinaryTree с нуля, которая включала метод remove (Object obj) для удаления элементов из указанного дерева. Кажется, он функционирует корректно для каждого типа, кроме Integer, и я не могу понять, почему.Метод удаления BinarySearchTree не работает при удалении целых чисел

public BinaryTree<E> remove(Object obj) { 
     try{ 
      E value = (E)obj; 
      int cmp = value.compareTo(this.value); 
      if(cmp == 0) { 
       List<BinaryTree<E>> kids = children(); 
       if(kids.size() == 0) { 
        return new EmptyBinarySearchTree<E>(); 
       } 
       if(kids.size() == 1) { 
        return kids.get(0); 
       } 
       //2 children 
       BinaryTree<E> successor = ((BinarySearchTree)right).smallest(); 
       BinaryTree<E> result = remove(successor.getValue()); 
       result.setValue(successor.getValue()); 
       return result; 
      } 
      if(cmp < 0) { 
       left = left.remove(value); 
      } 
      if(cmp > 0) { 
       right = right.remove(value); 
      } 
     } 
     catch(ClassCastException cce) { 

     } 
     return this; 
    } 

Я за рулем BinaryTree со следующим, который также реализует набор, который я построил:

package setDriver; 
import set.*; 
import list.*; 

public class HwTreeSetDriver 
{ 
    public static void main() 
    { 
     Set <Integer> values; 
     values = new TreeSet <Integer>(); 


    values.add (3); 
    values.add (5); 
    values.add (3); 



    for (int j=0; j<5; j++) 
     values.add (j * 10); 


    Iterator<Integer> itty = values.iterator(); 
    while (itty.hasNext()) 
     if (itty.next() % 2 == 1) 
      itty.remove();    // remove odd numbers 


} 

}

После запуска драйвера, размер по-прежнему 6, а набор содержит 3, 5, 10, 20, 30, 40.

Ниже приведен метод remove (Object obj) в TreeSet, который в свою очередь вызывает метод удаления, который я опубликовал изначально:

public boolean remove(Object obj){ 
    if(!contains(obj)) return false; 

    tree = tree.remove(obj); 
    size--; 
    return true; 
} 
+1

Ну, что же делать? Без рабочего кода или сообщений об ошибках/следов стека не так много. –

+1

Является ли 'remove' перегруженным? Есть ли версия 'remove (int)'? –

+1

Покажите нам код, который вы используете, чтобы управлять этим при его тестировании. – CandiedOrange

ответ

-1

Is int an object in Java?

INT не считается объектом здесь вопрос о StackOverflow для доказательства

+0

Это актуально? OP говорит: «Кажется, он функционирует правильно для каждого типа, кроме ** Целое число **», которое является ссылочным типом, а не то же, что и «int». –

+0

, но функция принимает объект ,,,,, –

+0

Oh go look up autoboxing – CandiedOrange

Смежные вопросы