Решая задачу, я наткнулся на такую проблему: в ходе работы программы должны удаляться из множества все объекты класса Cat, но почему-то при выводе они все-равно появляются. Может кто-нибудь объяснить? (Задача решена правильно, поэтому и возник вопрос)
Вывод:
com.javarush.test.Solution$Cat@776ec8df
com.javarush.test.Solution$Dog@41629346
com.javarush.test.Solution$Cat@7229724f
com.javarush.test.Solution$Cat@4c873330
com.javarush.test.Solution$Cat@119d7047
com.javarush.test.Solution$Dog@3b07d329
com.javarush.test.Solution$Dog@404b9385
com.javarush.test.Solution$Dog@41629346
com.javarush.test.Solution$Dog@3b07d329
com.javarush.test.Solution$Dog@404b9385
Baixa
43 уровень
почему объекты класса Cat все равно существуют?
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ayzek
7 июля 2021, 13:57решение
В этой задаче вывод, который в методе printPets, прописан в main два раза.
Сначала до удаления котов, потом после.
Потому и кажется, что ничего не удаляется
+3
hidden #2322530
26 июня 2021, 08:36
без кода непонятно что ты и где выводишь
0
Baixa
26 июня 2021, 09:34
Код решал задачу, поэтому его нельзя прикреплять к вопросу
0
hidden #2322530
26 июня 2021, 09:59
скопируй оттуда и приложи так ))
0
Baixa
26 июня 2021, 13:38
package com.javarush.task.jdk13.task08.task0820;
import java.util.HashSet;
import java.util.Set;
/*
Множество всех животных
*/
public class Solution {
public static void main(String[] args) {
Set<Cat> cats = createCats();
Set<Dog> dogs = createDogs();
Set<Object> pets = join(cats, dogs);
printPets(pets);
removeCats(pets, cats);
printPets(pets);
}
public static Set<Cat> createCats() {
Set<Cat> result = new HashSet<Cat>();
for (int i = 0; i < 4; i++) {
result.add(new Cat());
}
return result;
}
public static Set<Dog> createDogs() {
Set<Dog> result = new HashSet<Dog>();
for (int i = 0; i < 3; i++) {
result.add(new Dog());
}
return result;
}
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
Set<Object> result = new HashSet<>();
for (Cat c :
cats) {
result.add(c);
}
for (Dog c :
dogs) {
result.add(c);
}
return result;
}
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
pets.removeIf(cats::contains);
}
public static void printPets(Set<Object> pets) {
for (Object o :
pets) {
System.out.println(o);
}
}
public static class Cat{
}
public static class Dog{
}
}
0
hidden #2322530
26 июня 2021, 13:43
ну да. зачем форматирование включать.
у тебя ничего лишнего не выводится.
вот здесь добавить разделитель:
и сравни разницу
вывод в консоль нельзя стереть. если ты уже туда что-то вывел, то оно там останется. ты сравни объекты Dog$ их адреса в памяти. +2
Baixa
26 июня 2021, 14:40
Спасибо,теперь понял!)
0