2015-12-29 4 views
-3

Я использую Binarytree и для моегоява CompareTo вычитает значения

removeNode(E value) method (E extends Comparable<E>), 

я использую метод value.compareTo(root.getData()). К сожалению, он не сравнивается, но вычитает оба значения и возвращает результат как целое. Кто-нибудь знает, почему? Узлы и дерево строятся с короткими, как

Node<Short> n=new Node<Short>((short) 20); 

EDIT:

BinNodeGen<Short> rootNode = new BinNodeGen<Short>((short)20); 
    BinNodeGen<Short> NodeA2 = new BinNodeGen<Short>((short)10); 
    BinNodeGen<Integer> NodeA3 = new BinNodeGen<Short>((short)35); 
    BinTreeGen<Short> voll3 = new BinTreeGen<Short>(); 
    voll3.setRootNode(rootNode); 
    rootNode.setLeftChild(NodeA2); 
    rootNode.setRightChild(NodeA3); 
    voll3.insertNode((short)2); 
    voll3.insertNode((short)1); 
    voll3.insertNode((short)3); 
    voll3.insertNode((short)14); 
    voll3.insertNode((short)18); 
    voll3.insertNode((short)17); 
    voll3.insertNode((short)24); 
    voll3.insertNode((short)28); 
    voll3.insertNode((short)25); 
    voll3.insertNode((short)30); 
    voll3.removeNode(35); 
    ... 

и метод:

public void removeNode(E value) { 
    if (value.compareTo(root.getData()) == 0) { 

Однако, когда я пытаюсь

System.out.println(value.compareTo(root.getData()); 

Я получаю значение значение минус root.getData()!

+0

Мы не можем отладить невидимый код. Опубликуйте соответствующие части здесь. – csmckelvey

+0

ehm ... что? compareTo всегда возвращает int. в чем проблема? – Stultuske

+0

Что вы думаете, что 'compareTo' должен вернуться? – khelwood

ответ

4

Это именно то, что compareTo должна возвращать:

Возвращает: отрицательное целое число, ноль или положительное целое число, как это объект меньше, равен или больше указанного объекта.

См Comparable

0

Это то, что делает Short согласно документации:

значение 0, если это Short равно аргументу Short; значение меньше 0, если этот Short меньше числа аргумента Short; и значение, большее 0, если этот Коротко численно больше аргумента Short (подписанное сравнение).

Так это должно возвращать 0, если вы сравниваете равные шорты:

Short s = new Short("12"); 
    Short anotherShort = new Short("12"); 
    if(s.compareTo(anotherShort) == 0){ 
     System.out.println("Equal"); 

    } 
    else { 
     System.out.println("Not Equal"); 
    } 

Это должно напечатать «не равно».

более определенный пример будет это в соответствии с: http://www.tutorialspoint.com/java/lang/short_compareto.htm

package com.tutorialspoint; 

import java.lang.*; 

public class ShortDemo { 

public static void main(String[] args) { 

// create short object and assign value to it 
short val1 = 50, val2 = 200, val3 = 50; 
Short Shortval1 = new Short(val1); 
Short Shortval2 = new Short(val2); 
Short Shortval3 = new Short(val3); 

// returns less than 0 if this Short is less than the argument Short 
int cmp = Shortval1.compareTo(Shortval2); 
System.out.println("" + Shortval1 + " is less than " + Shortval2 + ", difference = " + cmp); 

// returns 0 if this Short is equal to the argument Short 
cmp = Shortval1.compareTo(Shortval3); 
System.out.println("" + Shortval1 + " is equal to " + Shortval3 + ",difference = " + cmp); 

// returns greater than if this Short is greater than the argument Short 
    cmp = Shortval2.compareTo(Shortval1); 
    System.out.println("" + Shortval2 + " is more than " + Shortval1 + ", 
difference = " + cmp); 
} 
} 

и это печатает:

50 is less than 200, difference = -150 
50 is equal to 50, difference = 0 
200 is more than 50, difference = 150 
Смежные вопросы