Множество всех животных

  • 10
  • Недоступна
Занесем животных в множества. Сначала создадим классы Cat и Dog, затем — методы createCats и createDogs (возвращают множества с собаками и кошками), метод join, возвращающий конгломерат из множеств собак и кошек. На случай недобрососедства — метод removeCats, удаляющий из pets котов. И ещё — метод printPets, пусть выводит на экран всех обитателей pets.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (216)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ульяна11 уровень, Санкт-Петербург
вчера, 13:49
можно и через цикл for (Cat c : cats) { if (pets.contains(c)) { pets.remove(c); } }
Serg Koval15 уровень, Киев
суббота, 17:36
странно, если котов удалить через цикл, то IDEA выдает правильный результат(три собаки), а вот валидатор почему-то носом воротит.
Александр13 уровень, Москва
4 сентября, 10:04
Я тут эксприменты проводил, попробовал объединить сеты командой Collections.addAll(pets, cats, dogs) - в документации сказано, что он более шустро работает. Однако, получилось ,что pets состоит из двух подмножеств, вследствие чего дальнейшие манипуляции над множеством (удаление котов) не работают.
Мариам10 уровень
28 июля, 21:29
Что бы удалить котов из сета PETS написала это и не работало:
pets.containsAll(cats);
потом словечко поменяла и заработало)
Anton Goncharenko14 уровень, Санкт-Петербург
7 августа, 07:36
Я сначала так же сделал, не заработало, потом прогнал через итератор- не работает, потом вернул всё как было( контэйнсОл) - и вуаля... попробуй победи логику валидатора))
Иван16 уровень, Рязань
28 июля, 20:43
Поправьте если что то не понял, мы создаем 4 кота и 3 собаки, потом в множество pets все добавляем, то есть pets содержит 7 животных. Удаляем всех котов, которые есть в cats, соответсвенно остается 3 собаки,НО у меня выводятся 6 собак и 4 кота в множестве pets, и валидацию прошел
Дмитрий9 уровень, Voronej
1 августа, 23:19
Все верно метод printPets вызывается 2 раза. Сначала со всеми животными, потом еще раз после удаления котов. Получаем вывод 6 собак и 4 кота(визуально вызовы же ничем не разделены).
Иван16 уровень, Рязань
6 августа, 15:10
Да, точно, спасибо большое
wan-derer.ru23 уровень, Москва
4 июля, 15:48
Хорошая задача. Даёт на практике понять что в коллекции не сами объекты, а ссылки на них, поэтому можно делать поиск объекта в одной коллекции, а манипуляцию с ним же - в другой. Ну и то что Cat наследник Object, а значит он тоже Object, а значит с ним можно обращаться методами Object :)
Pavel Milanov8 уровень, Москва
4 июля, 13:38
Ого, решил с первого раза. методы addAll и removeAll. После задач с датами самооценка сильно упала, без подсказок не решил ни одну. После этой задачи самооценка вышла в 0))
30 июня, 07:12
Удалить котов можно одной строчкой: pets.removeAll(cats); И добавить одно множество в другое тоже: petsResult.addAll(cats);
Aleks16 уровень, Москва
4 июля, 11:13
Блин логично, не увидел сразу. Спасибо!)
Сергей12 уровень, Санкт-Петербург
29 июня, 23:04
над ремувом призадумался, а оказалось идем итератором (явно через соответствующий объект или неявно через for-each) по кошкам, я выбрал for (Cat catRemove : cats) и удаляем их в pets: pets.remove(catRemove);
Pavel Dyakov14 уровень, Санкт-Петербург
30 июня, 07:05
Спасибо за подсказку. Я долго ломал голову).Через foreach всё получилось.
Алина12 уровень, Москва
27 июня, 18:36
почему с таким кодом IDE выдает ошибку: for(Object object: pets) { if(cats.contains(object)) pets.remove(object); } А с таким кодом все проходит: pets.removeIf(cats::contains);
Kirill Kudryavtsev15 уровень, Potok
5 сентября, 13:57
Потому что нельзя одновременно перебирать множество и удалять из него. В прошлых лекциях рассказывали. Нужно создать копию множества петс. Копию перебирать, а удалять из петс.
Павел10 уровень, Новосибирск
9 сентября, 12:07
не совсем так, есть итератор и в момент прохода итератора по коллекции с ним нельзя делать других действий кроме как прохода. То есть если будет записан код:
Object it = iterator.next();
for (int i = 0; i < cats2.length; i++){
    if(it.equals(cats2[i])){
    iterator.remove();
    }
программа будет работать, а вот так:
for (int i = 0; i < cats2.length; i++){
    if(iterator.next().equals(cats2[i])){
    iterator.remove();
    }
уже не будет работать