JavaRush /Курсы /Java Collections /Задачи | 7 уровень | 4 лекция

Задачи | 7 уровень | 4 лекция

Java Collections
7 уровень , 4 лекция
Открыта

— Привет, дружище. Держи свою интересную задачу.

18
Задача
Java Collections, 7 уровень, 4 лекция
Недоступна
Круговой итератор
Класс Solution наследуется от ArrayList. Перегрузи правильным образом метод iterator в классе Solution. Напишите свой класс RoundIterator внутри Solution, который будет итератором для списка Solution. Итератор должен ходить по кругу по всем элементам. В остальном поведение должно быть идентичным тек

— Подожди, мне тут звонят

— Алло… Угу… Да… Фабрика… Что там с этой фабрикой??? Алло, алло!

— Амиго, мне звонил капитан, про какую-то фабрику говорил и про агента секретного. Ты же мой друг, правда? Сходи к этому агенту IntelliJ IDEA, узнай, что там за дела с фабрикой. Только тсс, никому не говори.

— Да знаю я этого секретного агента, вместе столько часов провели. Не беспокойся, уже иду.

Комментарии (37)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Denis Odesskiy Уровень 46
8 февраля 2025
Написал юнит-тесты перед решением задачи для себя. Помогли, делюсь...

import com.javarush.task.task37.task3701.Solution;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;


public class SolutionTest {
    private Solution<Integer> list;

    @Before
    public void setUp() {
        list = new Solution<>();
        list.add(1);
        list.add(2);
        list.add(3);
    }

    @Test
    public void testRoundIterator() {
        Iterator<Integer> iterator = list.iterator();
        Integer[] expected = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1};
        int count = 0;
        try {
            for (Integer integer : expected) {
                assertEquals(integer, iterator.next());
                count++;
                if (count == 10) {
                    break;
                }
            }
        } catch (NoSuchElementException e) {
            fail("NoSuchElementException was thrown");
        }
    }

    @Test
    public void testRemove() {
        Iterator<Integer> iterator = list.iterator();
        iterator.next();
        iterator.remove();

        assertFalse(list.contains(1));
        assertEquals(2, list.size());
    }

    @Test(expected = ConcurrentModificationException.class)
    public void testConcurrentModification() {
        Iterator<Integer> iterator = list.iterator();
        list.add(4);
        iterator.next();
    }

    @Test
    public void testIteratorType() {
        Iterator<Integer> iterator = list.iterator();
        assertTrue(iterator instanceof Solution.RoundIterator);
    }

    @Test
    public void testSolutionExtendedArrayList() {
        Solution<Integer> solution = new Solution<>();
        assertTrue(solution instanceof ArrayList);
    }
}
Антон Уровень 50
10 ноября 2023
Решается через обертку к оригинальному итератору или листитератору. Вот не очевидный момент: has next должен проверять на то что список не пустой. Если не сделать ругается на не правильную реализацию Remove
Gans Electro Уровень 2
6 февраля 2024
Да все потому что там выйдет ошибка если передать пустой лист. Или когда таковой появляется при удалении. Я тоже вначале ставил true и не понимал
Dregid Уровень 40
28 февраля 2023
Валидатор задачу принял, но программа не запускается выдаёт ошибку из за рефлексии. Никогда ее не используйте когда пойдете работать разработчиком.
Денис Уровень 51
18 мая 2023
Согласен, чтобы не было ошибки, надо прописать в VM Options: --add-opens java.base/java.util=ALL-UNNAMED
aDuVaN4Ik Уровень 42
26 декабря 2022
Задачка странная. Правильное решение вообще ввергло в ужас. Но разобравшись в условии все пошло быстро.
1 декабря 2022
ахаххахахахха было лень писать тесты и думал так сделаю, в итоге только больше времени потратил. Сделайте сначала тесты что бы проверять результат нормально, а потом уже делайте) я сделал через

@Override
    public Iterator<T> iterator() {
        return new RoundIterator(0);
    }
и

 public class RoundIterator implements Iterator<T>
я хз зачем делать по другому) а так задача супер)
17 ноября 2022
Я сначала не понял. А потом понял. ребят подсказка

  while (it.hasPrevious())
                {
                    it.previous();
                }
Макс Дудин Уровень 41
28 июня 2022
что-то мне средние задачи в середине лекция часто сложней даются чем сложные в конце...
Jh-007 Уровень 47
13 июня 2022
Инкапсуляция, модификаторы доступа. Пофиг, у нас есть рефлексия.
Уровень 51
16 декабря 2021
кароч смотри это итератор понял да? Теперь напиши свой итератор
Ars Уровень 41
27 ноября 2021
Среднее количество попыток для этой задачи 2.32. Всего эту задачу решили 3364 учеников. Спустя 4 года после комментария о том, что валидатор работает очень долго и не принимает решение пока не заимплементишь все методы этот момент так и не исправили.
Сергей Уровень 41
19 июня 2022
Среднее количество попыток для этой задачи 2.28. Всего эту задачу решили 3731 учеников.