Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不可转换类型java.lang.Double的javac错误_Java_Compiler Errors_Terminal_Javac - Fatal编程技术网

不可转换类型java.lang.Double的javac错误

不可转换类型java.lang.Double的javac错误,java,compiler-errors,terminal,javac,Java,Compiler Errors,Terminal,Javac,我在这里发现了与我非常相似的问题,但我无法用其他帖子解决我的问题。对不起,可能是双重邮寄 我试图在我的终端中运行我的代码,但是我得到了一个javac错误,即使我的代码在Eclipse中看起来很好 public class MinHeap<E extends Comparable<E>> { List<E> h = new ArrayList<E>(); ArrayList<E> array

我在这里发现了与我非常相似的问题,但我无法用其他帖子解决我的问题。对不起,可能是双重邮寄

我试图在我的终端中运行我的代码,但是我得到了一个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;
      }
有什么建议吗

根据您的所有输入,我已经更改了返回类型,它工作正常

         public E remove() {
           E removedNode = h.get(0);
           E lastNode = h.remove(h.size() - 1);
           percolateDown(0, lastNode);

         return removedNode;
        }

谢谢

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

当您声明一个包含
Double
type对象的MinHeap实例时,返回类型将变为
Double
,您可以按如下方式编写它:

MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();
MinHeap MinHeap=。。。。
....
Double removedValue=minHeap.remove();
您的代码出现编译错误,因为它对于包含字符串对象的MinHeap没有意义,对吗?

应该这样做

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;
    }
}
公共类MinHeap{
列表h=新的ArrayList();
ArrayList ArrayPostingList=新建ArrayList();
//还有代码吗
公共静态void main(字符串[]args){
MinHeap testHeap=新的MinHeap();
testHeap.add(2.3);//自动装箱
System.out.println(testHeap.remove());//取消装箱
}
公共布尔加法(E){
返回h.add(e);
}
公共E删除(){
E removedNode=h.get(0);
E lastNode=h.remove(h.size()-1);
//这似乎就是问题所在
返回removedNode;
}
}

我认为您的eclipse使用的java版本与命令行中的版本不同。我猜您在eclipse中使用的是
Java1.7.x
,而在命令行中使用的是更低版本(例如
1.6.x
)。请在命令行中设置相同版本的java并检查。它的行为应该是一样的


尝试使用
java-version
在命令行上检查java版本。我是肯定的,它的JDK1.6或以下版本(如上代码)可以通过命令行和eclipse使用JDK1.7进行良好编译,但给出了JDK1.6的上述错误。

Double
是一个包装类,而
Double
是一个基本类型。它们是不同的,如果你试图返回一个需要原语的对象,编译器就会发疯。
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;
    }
}