编写一个包装的迭代器开始朝向结束并回绕以按顺序打印所有元素

时间:2017-09-28 18:44:25

标签: java arrays iterator

我需要为一个环绕数组编写一个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++];
    }
}

1 个答案:

答案 0 :(得分:0)

目前为止您发布的代码很难说明,但是您的完整数组未打印的问题可能会在迭代器的构造函数中与index=front相关联,并且可能会front=rear+1 1}}(当数组完全填满时)。所以当你从前面开始时,你会在hasNext()上立即得到假,并且你无法进行迭代。

如果是这种情况,您可以通过始终在前后保留一个间隙单元来修复它。如果你发布你正在迭代的课程代码,我可以帮你推荐一种方法。