1

ここで私のものと非常によく似た質問を見つけましたが、他の投稿で問題を解決できません。二重投稿すみません…

ターミナルでコードを実行しようとしていますが、コードは Eclipse で問題ないように見えますが、javac エラーが発生します。

      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 が保持する要素の型はであるため、同じ型の要素を削除しているため、メソッド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

あなたの日食は、コマンドラインで利用可能なものとは異なるJavaバージョンを使用していると思います。eclipseで使用していて、コマンドラインでJava 1.7.xいくつかの下位バージョン(例)を使用していると思います。1.6.xコマンドラインで同じバージョンのJavaを設定して確認してください。同じように動作するはずです。

を使用して、コマンドラインでJavaバージョンを確認してみてくださいjava -version。私は肯定的です。上記のコードのJDK1.6以下は、コマンドラインおよびEclipseを介してJDK 1.7で正常にコンパイルされますが、JDK1.6で前述のエラーが発生します。

于 2012-10-12T04:33:16.030 に答える