我在这里发现了非常类似的问题,但我无法解决其他帖子的问题。对不起双重发布可能......
我正在尝试在终端中运行我的代码但是我收到了一个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;
}
谢谢!
答案 0 :(得分:3)
由于MinHeap持有的元素属于E
类型,因此您要删除相同类型的元素,因此remove()
方法的返回类型也应为E
当你声明一个持有Double
类型对象的MinHeap实例时,无论如何返回类型都会变成Double
,你可以按如下方式编写它:
MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();
您的代码出现编译错误,因为对于持有String对象的MinHeap没有意义,对吗?
答案 1 :(得分:0)
这应该
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;
}
}
答案 2 :(得分:0)
我认为你的eclipse使用的是不同于命令行中可用的java版本。我猜你在eclipse中使用Java 1.7.x
和某些较低版本(例如1.6.x
)在命令行中。请在命令行中设置相同版本的java并检查。它的行为应该相同。
尝试使用java -version
在命令行上检查java版本。我是肯定的,它的JDK 1.6或更低版本与上面的代码通过命令行和eclipse编译JDK 1.7,但是给出了JDK 1.6提到的错误。