1

我在这里发现了与我非常相似的问题,但我无法用其他帖子解决我的问题。抱歉,可能会重复发布...

我试图在我的终端中运行我的代码,但我收到了一个 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;
        }

谢谢!

4

3 回答 3

3

由于 MinHeap 持有的元素是 type E,您正在删除相同类型的元素,因此方法的返回类型remove()也应该是E

当你声明一个持有类型对象的 MinHeap 实例时Double,返回类型Double无论如何都会变成你可以这样写:

MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();

您的代码给出了编译错误,因为它对于持有 String 对象的 MinHeap 没有意义,对吧?

于 2012-10-12T04:27:01.763 回答
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;
    }
}
于 2012-10-12T04:32:45.783 回答
0

我认为您的 Eclipse 使用的 java 版本与命令行中可用的 java 版本不同。我猜你Java 1.7.x在 Eclipse中使用,1.6.x在命令行中使用一些较低版本(例如)。请在命令行中设置相同版本的java并检查。它的行为应该相同。

尝试使用java -version. 我很肯定,它的 JDK 1.6 或更低版本的代码可以通过命令行和 eclipse 与 JDK 1.7 一起编译,但在 JDK 1.6 中会出现上述错误。

于 2012-10-12T04:33:16.030 回答