2014-03-28 93 views
0

我正在創建二叉樹。我不能等於整數,但在我的課程中,它的工作原理。以下是部分代碼:等於整數

In tree... 

public void add(BTree<T> tree, T newValue){ 

    if(newValue.equals(getValue())){ 
     System.out.println("equals, incrementing count..."); 
     tree.count.incrementAndGet(); 
    }else if(newValue.compareTo(tree.getValue()) > 0){ 
     addRight(tree, newValue); 
        //It will back here with another node 
    }else{ 
     addLeft(tree, newValue); 
        //It will back here with another node 
    } 
} 

In main... 

BTree<Integer> tree = new BTree<>(0); 
    tree.add(tree, 1); 
    tree.add(tree, 1); 
    tree.add(tree, 1); 
    tree.add(tree, -1); 

    System.out.println(tree.getLeftChild().getValue() + "(" + tree.getLeftChild().getCount() + ")" + "  " + tree.getRightChild().getValue() + "(" + tree.getRightChild().getCount() + ")"); 

In console... 

-1(1)  1(1) 

我該如何等於兩個VALUES?

+0

_我如何等於兩個VALUES?_ **使用正確實施的'equals()'方法** –

+0

你能告訴我怎麼做嗎? – rberla

+0

* if(newValue.equals(getValue()))*什麼是getValue? – bengoesboom

回答

2

看來您的equals的定義與compareTo不一致。這不是一件好事。

雖然你可以解決它通過使用compareTo完全,像這樣:

int cmpResult = newValue.compareTo(tree.getValue(); 
if (cmpResult == 0){ 
    System.out.println("equals, incrementing count..."); 
    tree.count.incrementAndGet(); 
}else if(cmpResult > 0){ 
    addRight(tree, newValue); 
}else{ 
    addLeft(tree, newValue); 
} 

Java documentation for the Comparable interface強烈建議你來解決這個問題:

強烈推薦(雖然不要求)自然排序與equals一致。這是因爲,如果排序集(和排序映射)沒有顯式比較器,當它們與自然排序與equals不一致的元素(或鍵)一起使用時,其行爲會「奇怪」。特別是,這樣一個有序的集合(或有序的映射)違反了集合(或映射)的一般合約,這是根據equals方法定義的。

+0

謝謝!錯誤在「樹」中。比沒有寫) – rberla