Set из котов

  • 10
  • Недоступна
Вам необходимо создать кошачье множество. Для этого нужен класс public static Cat. Затем реализуйте метод createCats, который должен создавать Set из котов и добавлять в него 3 котов. В методе main удалите одного кота из Set cats. И, наконец, реализуйте метод printCats, он должен вывести на экран всех котов, которые остались во множестве.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (178)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Стас9 уровень
3 декабря, 18:37
Продолжаю писать полезные и не очень комментарии к задачам. Комплексная задача на повторение пройденных тем. 1)Повторили создание классов + освежили в памяти "конструктор по умолчанию". (его можно и не добавлять, на то он и по умолчанию); 2)По пройденному уровню поработали с созданием Set и добавлением в него объектов, а не примитивных типов данных. Смущает что добавлять надо просто пустой объект без переменных.. но таково условие. Создавал объект при его добавлении в Set
cats.add(new Cat()); // повторяем 3 раза так как надо 3 объекта
3)
cats.remove(cats.iterator().next());
эту строку понимаю для себя примерно так: удаляю элемент из Set(а) cats, выбирая с помощью итератора элемент next(), обращаясь к текущему элементу Set(a). 4)Честно скопировал из лекции вывод в консоль с помощью цикла For each
for (Cat t : cats) {
            System.out.println(t);
        }
МногоБукв, но если кто осилил и заметил неточность в описании, не скупитесь на гневный ответ!
leksa14 уровень, Москва
19 ноября, 19:17
Объясните кто-нибудь, пожалуйста (внимание, есть спойлеры): 1. странная реализация программы, не работает cats.add("Мурзик"), но работает, если создавать объект: cats.add(new Cat()); 2. Почему напрямую не удаляет, но удаляет через Iterator? Я так понял, связано это с тем, что наш Set находится в одном классе, а работаем мы с ним в другом, верно? Или это из-за static? Тогда почему?
Yungaa9 уровень, Самара
1 декабря, 13:43
1. Мы создаем как раз нового кота( new Cat). Если бы прописали в классе еще один конструктор помимо конструктора по умолчанию (public Cat(String name){this name = name }) , можно было бы добавить кота так( cats.add(new Cat("Мурзик").
Sekator22 уровень, Староконстантинов
8 ноября, 14:28
как удалить n го кота ?
Egor16 уровень
30 октября, 19:23
Возможно было уже, ткните в ссылку, чем статик класс от не статика отличается? про методы и переменные понятно, про классы нет.
Renat18 уровень, Екатеринбург
9 октября, 18:03
Удалил кота с помощью foreach и break,теперь думаю,как быстрее через foreach+break или итератор🤔
Алексей23 уровень, Москва
10 октября, 13:23
Есть еще один вариант. cats.remove(cats.toArray()[0]);
Bender15 уровень, Калуга
8 ноября, 14:12
не пойму а разве в курсе хоть слово было про то как подобным способом удалять элементы из множества HashSet
barracuda9 уровень, Санкт-Петербург
29 ноября, 14:38
Вообще ничего. По крайней мере, вплоть до 8го уровня - не было.
barracuda9 уровень, Санкт-Петербург
29 ноября, 14:46
Спасибо. Работает. Хоть я и не понял, почему )) Видимо , мы передали Сет из котов в новый массив из 0 элементов... =========================== "Есть еще один вариант. cats.remove(cats.toArray()[0]);"
Алексей23 уровень, Москва
29 ноября, 17:57
мы скопировали сет из котов в массив (размер массива такой же, как и размер сета) после этого получили значение первого(0) элемента массива и удалили это значение из сета. Конечно же это не самый оптимальный способ)))), но в тот момент времени мне хотелось краткости в коде (это неправильное желание) Да, ясное дело мы это в курсе не проходили, но это скорее было из-за любопытства. Пользуясь случаем оставлю этот ресурс здесь))))))) http://govnokod.ru/
Fixpinger15 уровень, Ekaterinburg
22 сентября, 13:58
Кто - нибудь объяснит, почему нельзя в main просто получить доступ к объекту класса Cat и передать его в Set.remove(); Почему доступ нужно получать через массив или итератор??? Т.е. где у нас вообще существует cat'Ы, которых мы создаем?
Sergey16 уровень, Pattaya
3 октября, 15:48
удалить же нужно один из элементов коллекции, правильно?
Лёхансан16 уровень, Брест
8 октября, 14:28
Я так понимаю, что ссылка на конкретный объект из кучи не видна в методе main до тех пор, пока мы не укажем на нее явно, с помощью итератора.
26 августа, 16:19
Валидатор пропустил только удаление через итератор, хотя в самой программе кот нормально удалился и через remove.
Денис15 уровень, Москва
9 октября, 10:19
После работающего, но отвергаемого валидатором remove пришел сюда. Спасибо за подсказку. Они бы что ли упомянули запрет на remove в условии задачи... PS: И если удалять в цикле через итератор по конкретному имени кота, то тоже. PPS: И если у кото-класса переопределить toString(), то тоже не пройдет проверку. Возможно, кому-то пригодится.
Kubik_1311 уровень, Москва
2 декабря, 13:22
у меня все прошло с ремувом, может где в другом месте ошибка у вас закралась?
Павел Минеев41 уровень, Челябинск
19 августа, 18:36
Получилось удалить кота только так:
Iterator<Cat> it = cats.iterator();
cats.remove(it.next());
Вот на такое компилятор ругался:
Iterator<Cat> it = cats.iterator();
it.remove();
Кто-нибудь знает почему?
Yuri Serebryakov24 уровень
23 августа, 11:21
Видимо потому что в первом случае вы удаляете методом коллекции. А во втором методом итератора. А итератору вначале нужно удостовериться что впереди есть элемент hasNext(), а потом с помощью next() получить его. Могу ошибаться в силу малой компетенции и опыта)
Лёхансан16 уровень, Брест
8 октября, 14:21
Странно, у меня второй вариант решения был принят валидатором безо всяких замечаний.
MR10 уровень, Харьков
21 октября, 18:01
Второй вариант принял полностью, задача прошла.
Дмитрий Дмитрий11 уровень, Новосибирск
27 ноября, 16:22
У меня так же на второй вариант ругался! Почему?
Алексей9 уровень, Тверь
среда, 21:09
Второй вариант пройдёт, если добавить строку кода, чтобы указатель курсора переместился на первый элемент, (видимо, иначе компилятор не понимает, какой именно элемент хотят удалить) т.е.: Iterator<Cat> it = cats.iterator(); it.next(); it.remove();
Колян Мельников15 уровень, Минск
18 августа, 19:57
забавно что задачке поставили категорию хард, решается очень просто и с первой попытки....
steff18 уровень, Воронеж
25 июля, 13:14
Результат выполнения одинаков при создании котов так: cats.add(new Solution.Cat()); и вот так: cats.add(new Cat()); Побежал печатать теорию и листать книгу Ш. Прокомментируйте плиз если не сложно.
lyax11 уровень, Москва
22 августа, 17:13
Мб потому что класс Cat статический?