【发布时间】:2017-09-28 18:44:24
【问题描述】:
我需要为一个环绕数组编写一个迭代器,其中列表的前面从末尾开始。所以Iterator需要从“front”变量开始,迭代到列表的末尾,然后从列表的开头开始迭代,直到碰到“rear”。
数组“rear”中的最后一个元素没有被打印,当数组已满时,它不会打印任何元素。
public Iterator<E> iterator(){
return new IteratorAssist();
}
class IteratorAssist implements Iterator<E> {
public IteratorAssist() {
index = front;
}
@Override
public boolean hasNext() {
if(index != data.length)
return index != rear + 1 ;
else if(index == data.length)
index = 0;
return index != rear + 1;
}
@Override
public E next() {
if(!hasNext())
throw new NoSuchElementException();
return data[index++];
}
}
【问题讨论】:
-
至于解决方案,我会简单地将
data与自身连接,然后迭代结果,从而避免使用指针的麻烦。 -
你能把你设置的前后的代码显示出来吗?它们是否随时发生变化,您确定它们不是同一个元素并且前面总是> 后面吗?此外,带有两种打印输出情况的代码(其中后部元素被跳过,以及所有元素都被跳过)将非常有用。
-
我在下面写了一个答案,可能对您的问题有用。如果您可以为您的问题添加更多细节,我很乐意添加并使其更具体。如果你觉得它对你有帮助,你会考虑接受它吗?只是单击答案旁边的灰色复选标记,使其变为绿色?