• ,

package com.javarush.test.level08.lesson11.home02;

Здравствуйте. Подскажите почему не проходит проверку следующий код? Результат компилится правильно.

package com.javarush.test.level08.lesson11.home02;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/* Множество всех животных
1. Внутри класса Solution создать public static классы Cat, Dog.
2. Реализовать метод createCats, котороый должен возвращать множество с 4 котами.
3. Реализовать метод createDogs, котороый должен возвращать множество с 3 собаками.
4. Реализовать метод join, котороый должен возвращать объединенное множество всех животных - всех котов и собак.
5. Реализовать метод removeCats, котороый должен удалять из множества pets всех котов, которые есть в множестве cats.
6. Реализовать метод printPets, котороый должен выводить на экран всех животных, которые в нем есть. Каждое животное с новой строки
*/

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()
    {
        HashSet<Cat> result = new HashSet<Cat>();
        //напишите тут ваш код
        for (int i=0; i<4; i++)
        {
            result.add(new Cat());
        }
        return result;
    }

    public static Set<Dog> createDogs()
    {
        //напишите тут ваш код
        HashSet<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)
    {
        //напишите тут ваш код
        HashSet<Object> pets = new HashSet<Object>();
        {
            pets.add(cats);
            pets.add(dogs);
        }
        return pets;
    }

    public static void removeCats(Set<Object> pets, Set<Cat> cats)
    {
        //напишите тут ваш код
        for (Iterator<Object> iterator = pets.iterator();iterator.hasNext();)
        {
            Object curObj = iterator.next();
            if (curObj.toString().contains(cats.toString()))
            {
                pets.remove(curObj);
            }
        }
    }

    public static void printPets(Set<Object> pets)
    {
        //напишите тут ваш код
        for (Object x : pets)
        {
            System.out.println(x.toString());
        }
    }

    //напишите тут ваш код
    public static class Dog
    {
    }

    public static class Cat
    {
    }
}

5 комментариев

Peras
1.Попробуйте использовать ArrayList вместо Set.
2.В pets вы добавляете коллекции, а надо объекты cats и dogs, соответственно исправле метод remove
morrok
  • morrok
  • 0
  • Комментарий отредактирован 2016-01-17 21:44:03 пользователем morrok
Но ведь в условии сказано создать множество, что подразумевает, если я правильно понимаю set-ы?
Peras
я могу ошибаться, конечно, но насколько я помню, в этой задаче был ArrayList. Попробуйте оставить сеты, но насчет того что вы добавляете сеты в петс — это 100% ошибка
novant
Да в методе join ты используешь не тот метод, есть специальный метод для добавления коллекций
Потом что бы удалить котов из pets тебе итератор что бы проходит по cats b еще один итератор что бы сверять в pets есть ли коты, если есть itr.remove();
but42
Можно добавлять в pets по отдельности через итератор котов и собак, то есть через 2 небольших цикла. В методе remove можно просто проверять на наличие объектов из pets в множестве cats и при совпадении удалять, то есть без дополнительных toString().
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.