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

Открыта

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

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

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

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

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

18
Задача
Java Collections,  7 уровень,  4 лекция
Недоступна
Круговой итератор
Класс Solution наследуется от ArrayList. Перегрузи правильным образом метод iterator в классе Solution. Напишите свой класс RoundIterator внутри Solution, который будет итератором для списка Solution. Итератор должен ходить по кругу по всем элементам. В остальном поведение должно быть идентичным тек
Комментарии (16)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Kex37 уровень, Тольятти
вторник, 08:33
решил с помощью паттерна Decorator
CTAPuk41 уровень, Москва
16 марта, 17:44
Полная копия оригинального Itr() и исправление логики в 3-х строках, помимо подсказанных IDEA 7 попыток, увы
MartyMcAir41 уровень
16 марта, 16:18
смотрим как работает Itr внутри ArrayList и построчно себе комментим, строчку за строчкой что там происходит.. и то что юзаются внутренние методы и поля коллекции (в которой находится итератор).. А в методе hasNext проверяем if указатель == size(), то переводим указатель на 0-вой индекс.. а возвращать всегда true; _ Вот и получается, что итератор, идет по кругу. Но вот с remove(..) возникла странна загвоздка, удаляет как надо а валя ругается: "remove без параметров должен удалять текущий элемент.".. Зато вот такой хак: Solution.super.iterator().remove(); - съел на ура.
Дворник34 уровень, Санкт-Петербург
16 февраля, 18:25
Одни таймауты (
Oleg Martynov41 уровень, Санкт-Петербург
19 января, 21:28
Заюзал в реализации итератор суперкласса. Цикличность обеспечивается созданием нового экземпляра Solution.super.iterator, если у предыдущего hasNext() == false. Приняло.
Виталий41 уровень, Москва
18 апреля, 16:52
Это решение напомнило анекдот про нового русского, который покупал новую машину, когда в старой заполнялась пепельница))
Даниил41 уровень
29 сентября 2019, 19:03
Задачка дала мне и моему самолюбию пинка, так как даже такую задачу не смог решить сам(
Андрей40 уровень, Одесса
23 марта 2019, 14:53
На мой взгляд, для решения данной задачи оптимально подходит паттерн Proxy/Decorator. Хотя сам сперва решил стандартным способом - заимплеменил интератор и реализовал его методы как написал ниже Vra. А кода сделал через прокси - код сократился в 3 раза, причем подшаманить пришлось только один метод hasNext...
hidden #128120241 уровень
10 августа 2019, 13:34
Думаю, что паттерн декоратор всё таки будет ближе к этой задаче, потому как прокси больше нацелен на контроль доступа к обьекту, а декоратор на добавление функций к обьекту(я подразумеваю также дополнительный функционал в существующих методах, а не целые отдельные функции). Вот тут есть ещё немного инфы: stackoverflow
Даниил41 уровень
29 сентября 2019, 19:03
Полностью согласен с Владимиром.
Максим41 уровень, Ростов-на-Дону
14 января 2019, 15:59
отличная задача!
Vra40 уровень
28 декабря 2017, 17:52
скопипастил с минимальными изменениями все методы и конструктор внутреннего класса Itr в классе ArrayList.. вали пропустил
Gelserkirchen39 уровень, Екатеринбург
1 декабря 2017, 03:34
вместЕ а не вместИ
3 января 2019, 10:04
спасибо, исправили)