我需要为一个环绕数组编写一个Iterator,其中列表的前面开始朝向结束。因此Iterator需要从“前”变量开始,迭代直到列表的结尾,然后从列表的开头开始并迭代直到它到达“后方”。
数组“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++];
}
}
答案 0 :(得分:0)
目前为止您发布的代码很难说明,但是您的完整数组未打印的问题可能会在迭代器的构造函数中与index=front
相关联,并且可能会front=rear+1
1}}(当数组完全填满时)。所以当你从前面开始时,你会在hasNext()
上立即得到假,并且你无法进行迭代。
如果是这种情况,您可以通过始终在前后保留一个间隙单元来修复它。如果你发布你正在迭代的课程代码,我可以帮你推荐一种方法。