Java ArrayDeque删除和删除;轮询方法错误

Java ArrayDeque删除和删除;轮询方法错误,java,debugging,methods,arraydeque,Java,Debugging,Methods,Arraydeque,目前我正在编写ArrayQue的实现。我正在研究pollFirst、pollLast、removeFirst和removeLast方法。我不完全确定我写的方法是否正确。我编写了一个驱动程序来测试这些方法,但我不确定输出是否正确 驾驶员可位于以下位置: 以下是一些方法: 首先: T result = (T) deque[head]; // Element is null if deque empty if (result == null) return null;

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

驾驶员可位于以下位置:

以下是一些方法:

首先:

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;


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

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


要修复该错误,请更改行
T result=(T)deque[T]
T结果=(T)deque[tail]

请发布整个类,而不仅仅是方法体。例如,根据
deque.length
是否为2的幂,代码
&(deque.length-1)
可能是正确的,也可能是错误的;但我无法从你的表演中看出这一点。给你,这是整个课程:)我会看一看,但是如果你编辑你的问题会更好-这会使问答页面对其他可能有类似问题的人更有用。因为课程很长,如果你把它简化为一个最小的例子-一个完整的课程,但只是演示该bug所需的部分。