这是我的d-ary堆的remove方法。当我编译的时候,我得到了很多“不可转换类型”的错误。还要注意的是,我的程序扩展了可比较的。
public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>我知道我的数组不是object类型,而是T类型。
T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE]; 问:我知道所有的东西都应该是类型T,但是当我写代码的时候,我收到了很多"CAN'T CONVERT type T TO TYPE INT“的错误,所以我决定进行类型转换,使它成为相同的类型(T)或(Integer)。我现在意识到这样做是错误的,因为我得到了“不可转换类型”错误。对Java泛型有很高理解的人,请告诉我保持T类型的所有东西的技巧和技巧。
public void remove(T o) {
for(int i = 0; i < _nodeArray.length; i++){
if(_nodeArray[i].equals(o)){
_nodeArray[i] = _nodeArray[_numNodes - 1];
if((Integer)_nodeArray[i] > parentIdx(i)){
bubbleUp((Integer)_nodeArray[i]);
}
else{
trickleDown((Integer)_nodeArray[i]);
}
}
else{
throw new NoSuchElementException();
}
_numNodes--;
}
}错误:当我类型转换(整型)时发生。我可以张贴我的所有代码,如果你想我这样做,但我认为这是足够的。
发布于 2011-08-30 06:47:28
您真的不需要做太多事情--它实际上是正确的。只需删除显式类型转换,并在>上就地使用compareTo
public void remove(T o) {
for(int i = 0; i < _nodeArray.length; i++){
if(_nodeArray[i].equals(o)){
_nodeArray[i] = _nodeArray[_numNodes - 1];
if(_nodeArray[i].compareTo(parentIdx(i)) > 0){
bubbleUp(_nodeArray[i]);
}
else{
trickleDown(_nodeArray[i]);
}
}
else{
throw new NoSuchElementException();
}
_numNodes--;
}
}https://stackoverflow.com/questions/7236765
复制相似问题