0

挿入方法に問題があります。スワップする必要がある数値を追加しようとすると、範囲外のインデックス例外が発生します。ここに: Collections.swap(table, table.get(親), table.get(子)); これがヒープに追加する方法です。tHeap.insert(14); 助けてくれてありがとう。

    public class Heap {
private ArrayList<Integer> table;

public Heap() {
    table = new ArrayList<Integer>();
}

public void insert(Integer toInsert) {
    table.add(toInsert);
    int child = table.size() - 1;
    int parent = (child - 1) / 2;
    //TextIO.putln("1  " + parent + " " + toInsert + " " + child);
    while (parent >= 0 && table.get(parent) > table.get(child)) {
        TextIO.putln("Swapping: " + parent + " Parent for Child: " + child);
        Collections.swap(table, table.get(parent), table.get(child));
    }

}

public void printTable() {
    for (int i = 0; i < table.size(); i++) {
        TextIO.putln("Index: " + i + " Data: " + table.get(i));

    }

}
    }
4

1 に答える 1

0

私はあなたが意味すると思いますCollections.swap(table, parent, child);か?ArrayList.getインデックスの要素を返します ( Java ArrayList API )Collections.swapインデックスの要素を交換します ( Java Collections API )。インデックスの値ではなく、インデックスを渡す必要があります。また、あなたのwhileループでは、子と親を更新したいと思うかもしれません。

于 2013-01-18T14:09:42.113 に答える