【问题标题】:adding returned value into arrayList Java将返回值添加到 arrayList Java
【发布时间】:2012-10-01 16:12:04
【问题描述】:

我迷失在代码中。我正在尝试将返回值添加到 ArrayList 中。返回的值被打印出来,我尝试将其转换为可以将其添加到 ArrayList。但似乎没有任何效果。

我在public void getHeap() 中,想从public double remove() 中检索return 值以添加到一个ArrayList 中。它不断告诉我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) {
        //....
    }
}

【问题讨论】:

  • 请编辑您的帖子并包含错误的堆栈跟踪;还要在代码中指出引发错误的行。
  • 假设有两个remove 方法吗?因为你的例子不会编译
  • 请发帖Short, Self Contained, Correct (Compilable), Example。您发布的代码无法编译。您定义了 2 个删除方法。
  • 请同时包含您的错误消息和堆栈跟踪
  • 我删除了一个remove 方法。

标签: java arraylist return


【解决方案1】:

尝试改用这个:

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

另外,我认为arrayPostingList 应该是E 类型,而不是明确的Double

【讨论】:

  • arrayPostingList 是否是E 类型似乎并不重要。不过,我已经删除了两种相同方法中的一种。
  • 但是您是否尝试像@Jim_Garrison 所说的那样同时增加arrayPostingList 和remove 方法?这是一个组合交易。另外顺便说一句,您的代码打印删除和打印,然后再次删除并添加到列表中,可能会引入意外结果
【解决方案2】:

你给remove()打了两次电话:

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

在最后一次迭代中,当只剩下一项时,第二次调用将失败。

我认为你的意图是:

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

【讨论】:

  • 谢谢!这就对了。如果我理解正确,通过使用final,它会在remove 方法完成后获取值?
  • final 关键字只是意味着不能重新分配变量。我习惯于使所有内容都保持不变,除非需要对其进行修改,但这根本不会影响这里的行为。有一个不可变对象的谷歌,例如:ibm.com/developerworks/java/library/j-jtp02183/index.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2021-12-07
  • 2012-05-27
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多