我在这里发现了与我非常相似的问题,但我无法在其他帖子中解决我的问题。很抱歉发了两个帖子。
我试图在我的终端上运行我的代码,但是我得到了一个javac错误,即使我的代码在Eclipse中看起来很好。
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<E> arrayPostingsList = new ArrayList<E>();
//some more code
public double remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
//this seems to be the problem
return (Double) removedNode;
}这是我得到的错误
MinHeap.java:40: inconvertible types
found : E
required: java.lang.Double
Double B = (Double) removedNode;
^
1 error有什么建议吗?
有了你的所有输入,我已经改变了返回类型,它工作得很好。
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
return removedNode;
}谢谢!
发布于 2012-10-12 12:32:46
这样就可以了
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<E> arrayPostingsList = new ArrayList<E>();
// some more code
public static void main(String[] args) {
MinHeap<Double> testHeap = new MinHeap<Double>();
testHeap.add(2.3); // auto-boxing
System.out.println(testHeap.remove()); //unboxing
}
public boolean add(E e) {
return h.add(e);
}
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
// this seems to be the problem
return removedNode;
}
}发布于 2012-10-12 12:27:02
由于MinHeap持有的元素的类型为E,因此您要删除的是同一类型的元素,因此remove()方法的返回类型也应为E。
当您声明一个包含Double类型对象的MinHeap实例时,返回类型无论如何都会变成Double,您可以按如下方式编写它:
MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();您的代码给出了编译错误,因为它对包含String对象的MinHeap没有意义,对吧?
发布于 2012-10-12 12:33:16
我认为您的eclipse使用的是与命令行不同的版本,我猜您在eclipse中使用的是Java 1.7.x,而在命令行中使用的是更低的版本(例如1.6.x)。请在命令行中设置相同版本的java并检查。它的行为应该是一样的。
尝试使用java -version在命令行上检查java版本。我很肯定,它的JDK 1.6或更低版本,就像上面的代码一样,可以通过命令行编译JDK 1.7以及eclipse,但在JDK 1.6中会出现上述错误。
https://stackoverflow.com/questions/12852230
复制相似问题