Java ArrayDeque删除和删除;轮询方法错误
目前我正在编写ArrayQue的实现。我正在研究pollFirst、pollLast、removeFirst和removeLast方法。我不完全确定我写的方法是否正确。我编写了一个驱动程序来测试这些方法,但我不确定输出是否正确 驾驶员可位于以下位置: 以下是一些方法: 首先: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;
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所需的部分。