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

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

Открыта

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

18
Задача
Java Collections,  7 уровень4 лекция
Недоступна
Круговой итератор
Круговой итератор

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

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

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

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

Комментарии (37)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Denis Odesskiy Full Stack Developer
8 февраля 2025, 22:25
Написал юнит-тесты перед решением задачи для себя. Помогли, делюсь...
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, 16:33
Решается через обертку к оригинальному итератору или листитератору. Вот не очевидный момент: has next должен проверять на то что список не пустой. Если не сделать ругается на не правильную реализацию Remove
Gans Electro
Уровень 36
6 февраля 2024, 17:45
Да все потому что там выйдет ошибка если передать пустой лист. Или когда таковой появляется при удалении. Я тоже вначале ставил true и не понимал
DregidBackend Developer в Сбер
28 февраля 2023, 15:35
Валидатор задачу принял, но программа не запускается выдаёт ошибку из за рефлексии. Никогда ее не используйте когда пойдете работать разработчиком.
Денис
Уровень 51
18 мая 2023, 16:54
Согласен, чтобы не было ошибки, надо прописать в VM Options: --add-opens java.base/java.util=ALL-UNNAMED
aDuVaN4Ik
Уровень 42
26 декабря 2022, 17:54
Задачка странная. Правильное решение вообще ввергло в ужас. Но разобравшись в условии все пошло быстро.
Николай ДаниловTeam Lead в ФИПС
1 декабря 2022, 06:26
ахаххахахахха было лень писать тесты и думал так сделаю, в итоге только больше времени потратил. Сделайте сначала тесты что бы проверять результат нормально, а потом уже делайте) я сделал через
@Override
    public Iterator<T> iterator() {
        return new RoundIterator(0);
    }
и
public class RoundIterator implements Iterator<T>
я хз зачем делать по другому) а так задача супер)
17 ноября 2022, 21:14
Я сначала не понял. А потом понял. ребят подсказка
while (it.hasPrevious())
              {
                  it.previous();
              }
Макс Дудин
Уровень 41
28 июня 2022, 20:06
что-то мне средние задачи в середине лекция часто сложней даются чем сложные в конце...
Jh-007
Уровень 28
13 июня 2022, 13:05
Инкапсуляция, модификаторы доступа. Пофиг, у нас есть рефлексия.
Уpовень 302
16 декабря 2021, 21:12
кароч смотри это итератор понял да? Теперь напиши свой итератор
Ars
Уровень 41
27 ноября 2021, 07:57
Среднее количество попыток для этой задачи 2.32. Всего эту задачу решили 3364 учеников. Спустя 4 года после комментария о том, что валидатор работает очень долго и не принимает решение пока не заимплементишь все методы этот момент так и не исправили.
Сергей
Уровень 1
19 июня 2022, 11:40
Среднее количество попыток для этой задачи 2.28. Всего эту задачу решили 3731 учеников.