【问题标题】:Java ArrayDeque Remove & Poll Methods ErrorJava ArrayDeque 删除和轮询方法错误
【发布时间】:2019-10-31 14:58:23
【问题描述】:

目前我正在编写 ArrayDeque 的实现。我正在研究 pollFirst、pollLast、removeFirst 和 removeLast 方法。我不完全确定我写的方法是否正确。我编写了一个驱动程序来测试这些方法,但我不确定输出是否正确。

驱动可以在这里找到:https://pastebin.com/bH0D78jG

这里有以下方法:

民意调查:

T result = (T) deque[head]; // Element is null if deque empty
    if (result == null)
        return null;
    deque[head] = null;     // Must null out slot
    head = (head + 1) & (deque.length - 1);
    return result;

投票最后:

    int t = (tail - 1) & (deque.length - 1);
    T result = (T) deque[t];
    if (result == null)
        return null;
    deque[t] = null;
    tail = t;
    return result;

先删除

    T x = pollFirst();
    if (x == null)
        throw new NoSuchElementException();
    return x;

删除最后一个

    T x = pollLast();
    if (x == null)
        throw new NoSuchElementException();
    return x;

this is a picture of the sample output

我最关心的是方法以及它在 pollFirst 和 pollLast 之后如何输出数组。双端队列的每一端不应该有一个空值吗?

【问题讨论】:

  • 请发布整个课程,而不仅仅是方法体。例如,代码& (deque.length - 1) 可能没问题,也可能错误,这取决于deque.length 是否是2 的幂;但我无法根据您显示的内容进行检查。
  • pastebin.com/ckf5iWbv 给你,这是整个课程:)
  • 我会看一下,但如果您编辑您的问题会更好 - 它会使问答页面对可能有类似问题的其他人更有用。
  • 由于课程很长,如果您将其简化为一个最小的示例也会有所帮助 - 一个完整的课程,但只是演示错误所需的部分。

标签: java debugging methods arraydeque


【解决方案1】:

问题出在您的pollLast 方法中。在peekLast 方法中,您使用tail 作为双端队列中最后一个元素的索引,但在pollLast 方法中,您使用tail - 1 作为该元素的索引。这意味着您要删除(并清空)倒数第二个元素,而不是最后一个。

要修复此错误,请将行 T result = (T) deque[t]; 更改为 T result = (T) deque[tail];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2015-04-05
    • 1970-01-01
    • 2015-04-03
    • 2018-11-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多