0

私はコードで迷子になっています。戻り値をArrayListに追加しようとしています。戻り値が出力され、ArrayListに追加できるようにキャストしようとしました。しかし、何も機能していないようです。

私はにいて、ArrayListに追加するためにから値public void getHeap()を取得したいと思っています。それは私に言い続けます。何か助けはありますか?returnpublic double remove()source not found

ありがとう!

public class MinHeap<E extends Comparable<E>> {

    List<E> h = new ArrayList<E>();
    ArrayList<Double> arrayPostingsList = new ArrayList<Double>();

    public void getHeap() {
        MinHeap<Double> heap = new MinHeap<Double>(new Double[]{0.5015530788463572, 0.5962770626486013, 0.4182157748994399});

        ArrayList<Double> newArray = new ArrayList<Double>();
        System.out.println();


        while (!heap.isEmpty()) {
            System.out.println(heap.remove());
            newArray.add(heap.remove());
        }

    }

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

        return (Double) removedNode;
    }

    public MinHeap() {
    }

    public MinHeap(E[] keys) {
        for (E key : keys) {
            h.add(key);
        }

        for (int k = h.size() / 2 - 1; k >= 0; k--) {
            percolateDown(k, h.get(k));
        }
    }

    public void add(E node) {
        h.add(null);
        int k = h.size() - 1;
        while (k > 0) {
            int parent = (k - 1) / 2;
            E p = h.get(parent);
            if (node.compareTo(p) >= 0) {
                break;
            }
            h.set(k, p);
            k = parent;
        }
        h.set(k, node);
    }

    public E min() {
        return h.get(0);
    }

    public boolean isEmpty() {
        return h.isEmpty();
    }

    void percolateDown(int k, E node) {
        //....
    }
}
4

2 に答える 2

1

代わりにこれを使用してみてください:

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

また、明示的にではなくarrayPostingList、タイプにする必要があると思います。EDouble

于 2012-10-11T04:20:51.670 に答える
0

あなたはremove()2回電話しています:

while (!heap.isEmpty()) {
    System.out.println(heap.remove());
    newArray.add(heap.remove());
}

最後の反復で、アイテムが1つしか残っていない場合、2番目の呼び出しは失敗します。

私はあなたの意図は次のとおりだと思います:

while (!heap.isEmpty()) {
    final Double removed = heap.remove();
    System.out.println(removed);
    newArray.add(removed);
}
于 2012-10-11T04:35:45.793 に答える