Итерация по связанному списку

Я создал LinkedList с LinkedListIterator, который реализует интерфейс Iterator<E>.

Интерфейс имеет следующие функции:

Next();
hasNext();

Я пытаюсь перебрать свой LinkedList, используя функцию итератора, которая возвращает объект Iterator<E>. Это моя функция:

public Iterator<E> iterator(int stop) {

    if(size==0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }
    Iterator<E> result = new LinkedListIterator();
    for(int i = 0; i<stop; i++){
        result.next();
    }
    return result;
}

У меня также есть тестовый класс, который запускает симуляцию Iterator:

public class TestLinkedList {

    public static void main(String[] args) {

        //StudentInfo.display();

        LinkedList<Integer> xs;
        final int MAX_SIZE = 5;

        for (int stop = 0; stop<MAX_SIZE; stop++) {
            for (int start = 0; start<=stop; start++) {

                System.out.println("start="+start+", stop="+stop);

                xs = new LinkedList<Integer>();

                for (int i=0; i<MAX_SIZE; i++) {
                    xs.addLast(i);
                }

                System.out.println(xs);

                Iterator<Integer> i = xs.iterator(stop);

                while (i.hasNext()) {
                    System.out.println(i.next());
                }
            }
        }
    }
}

Это моя другая реализация итератора:

public Iterator<E> iterator(int start, int stop) {
    if(size == 0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }

    Iterator<E> result = new LinkedListIterator();
    for(int i = start; i<stop; i++){
        result.next();
    }
    return result;
}

Когда я запускаю симуляцию, я получаю результат:

start=0, stop=0
{0,1,2,3,4}
0
1
2
3
4
start=0, stop=1
{0,1,2,3,4}
1
2
3
4
start=1, stop=1
{0,1,2,3,4}
1
2
3
4
start=0, stop=2
{0,1,2,3,4}
2
3
4
start=1, stop=2
{0,1,2,3,4}
2
3
4
start=2, stop=2
{0,1,2,3,4}
2
3
4
start=0, stop=3
{0,1,2,3,4}
3
4
start=1, stop=3
{0,1,2,3,4}
3
4
start=2, stop=3
{0,1,2,3,4}
3
4
start=3, stop=3
{0,1,2,3,4}
3
4
start=0, stop=4
{0,1,2,3,4}
4
start=1, stop=4
{0,1,2,3,4}
4
start=2, stop=4
{0,1,2,3,4}
4
start=3, stop=4
{0,1,2,3,4}
4
start=4, stop=4
{0,1,2,3,4}
4

Когда я должен получить результат:

// start=0, stop=0
// {0,1,2,3,4}
// 0
// start=0, stop=1
// {0,1,2,3,4}
// 0
// 1
// start=1, stop=1
// {0,1,2,3,4}
// 1
// start=0, stop=2
// {0,1,2,3,4}
// 0
// 1
// 2
// start=1, stop=2
// {0,1,2,3,4}
// 1
// 2
// start=2, stop=2
// {0,1,2,3,4}
// 2
// start=0, stop=3
// {0,1,2,3,4}
// 0
// 1
// 2
// 3
// start=1, stop=3
// {0,1,2,3,4}
// 1
// 2
// 3
// start=2, stop=3
// {0,1,2,3,4}
// 2
// 3
// start=3, stop=3
// {0,1,2,3,4}
// 3
// start=0, stop=4
// {0,1,2,3,4}
// 0
// 1
// 2
// 3
// 4
// start=1, stop=4
// {0,1,2,3,4}
// 1
// 2
// 3
// 4
// start=2, stop=4
// {0,1,2,3,4}
// 2
// 3
// 4
// start=3, stop=4
// {0,1,2,3,4}
// 3
// 4
// start=4, stop=4
// {0,1,2,3,4}
// 4

Я не понимаю, чего мне не хватает в моей функции Iterator, может кто-нибудь помочь мне с этим?


person Garret Ulrich    schedule 07.04.2017    source источник
comment
Подсказка: вы не используете start   -  person Vivek Chavda    schedule 08.04.2017
comment
@VivekChavda функция работает только при остановке переменной, чего я и хочу. Это задание дал учитель. Он хочет, чтобы я сначала реализовал Iterator с параметром остановки. Используя тест, который он написал сам   -  person Garret Ulrich    schedule 08.04.2017
comment
Смотрите, у меня есть две реализации Iterator @VivekChavda, одна с start и одна с start, stop   -  person Garret Ulrich    schedule 08.04.2017
comment
А, спасибо, я неправильно понял. Я вижу проблему здесь, ваша функция остановки в основном является функцией запуска. Я бы разместил код, который вы написали, и может изменить   -  person Vivek Chavda    schedule 08.04.2017
comment
Если вы можете помочь мне, это было бы здорово, большое спасибо, мне просто нужна помощь с функцией остановки, я могу сделать старт-стоп самостоятельно.   -  person Garret Ulrich    schedule 08.04.2017
comment
если вы можете выполнить функцию старт-стоп, функция остановки должна вызывать только функцию «звезда-стоп» с start=0   -  person Tupac    schedule 08.04.2017
comment
Хотя у меня проблемы с обоими. Я не понимаю, что я делаю неправильно с моим циклом for   -  person Garret Ulrich    schedule 08.04.2017


Ответы (1)


Похоже, ваш итератор неправильно сгенерирован. Сначала вы создаете итератор, а затем используете .next() для удаления stop числа элементов спереди, а затем возвращаете итератор, который будет выполняться через оставшуюся часть списка до тех пор, пока не закончится, когда hasNext() вернет false. Ваш метод должен выглядеть примерно так.

public Iterator<E> iterator(int start) {
    if(size == 0){
        throw new UnsupportedOperationException("IMPLEMENT THIS METHOD");
    }
    Iterator<E> result = new LinkedListIterator();
    for(int i = 0; i<start; i++){
        result.next();
    }
    return result;
}

Для того, чтобы реализовать стоп-значение. Я предполагаю, что вам придется изменить реализацию LinkedListIterator, чтобы свойство заставляло hasNext() возвращать ложное stop количество элементов до конца.

person Evan Snapp    schedule 04.10.2018