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++){
Cat cat = new Cat();
result.add(cat);
}
return result;
}
public static Set<Dog> createDogs() {
Set<Dog> dogi = new HashSet<>();
for (int i = 0; i<3; i++){
Dog dog = new Dog();
dogi.add(dog);
}
return dogi;
}
public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
Set<Object> pets = new HashSet<>();
pets.addAll(cats);
pets.addAll(dogs);
return pets;
}
public static void removeCats(Set<Object> pets, Set<Cat> cats) {
Iterator<Object> iterator = pets.iterator();
Iterator<Cat> catiter =cats.iterator();
while (iterator.hasNext()){
while (catiter.hasNext()){
if (iterator.next().equals(catiter.next()))
iterator.remove();
}
}
}
public static void printPets(Set<Object> pets) {
Iterator<Object> printerator = pets.iterator();
while (printerator.hasNext()){
System.out.println(printerator.next());
}
}
public static class Cat{}
public static class Dog{}
}
Глюк именно в удалении котов. Я пытаюсь создать итератор для каждого множества и по принципу "пузырьковой" перебираю их сравнивая друг с другом. Но чет не работает... хотя лично по мне должно)
Леонель Хантер
16 уровень
Почему так не работает?) Компилятор типа "зависает" и выводит в окно, что превышено время ожидания.
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр Анисимов
3 мая 2020, 08:53
просто удали из pets всех cats через removeAll() погугли как из одного множества удалить другое
и вроде как нельзя перебирать множество и корректировать его одновременно
0
Леонель Хантер
3 мая 2020, 09:01
как нельзя перебирать и удалять) для этого и существует итератор)
0
Александр Анисимов
3 мая 2020, 09:15
да, сорян, че то я уже сам загнался)
0
Любовь
3 мая 2020, 08:52
Вы усложняете метод с удаление котов, достаточно написать вот так, потому что все необходимы аргументы уже переданы в метод
0
Леонель Хантер
3 мая 2020, 09:00
я так и сделал... подсмотрел уже) но все же интересно, почему не работает) причем запускал без ДжаваРаш плагина, тоже не удаляет(
0
Леонель Хантер
3 мая 2020, 09:02
компилирует... но не удаляет( выводит по итогу все элементы множества pets.
0
Александр Анисимов
3 мая 2020, 09:25
2 принта в мейне, выводит первый до метода removeCats, до 2 не доходит почему то
0
Александр Анисимов
3 мая 2020, 11:35
зачем я влез в это?))) кароче, ты создал 2 итератора до начала циклов, оба.
catiter.hasNext() будет true после 4 проверки, в итоге 1 цикл после первого прохода до if не доходит
если забросить итератор котов в первый цикл и пересоздавать то вроде норм.
еще с iterator.next().equals(catiter.next()) возникла проблема, я че то так и не въехал почему
то ли из за того что pets <Object> а cats<Cat> то ли еще из за чего, объясните кто шарит)
Object pet = iteratorPets.next();
Object cat = iteratorCats.next();
if (pet.equals(cat)) только если ссылки передать заработало
0