level08.lesson11.home06

/* Вся семья в сборе
1. Создай класс Human с полями имя (String), пол (boolean), возраст (int), дети (ArrayList<Human>).
2. Создай объекты и заполни их так, чтобы получилось: два дедушки, две бабушки, отец, мать, трое детей.
3. Вывести все объекты Human на экран.
*/

import java.util.*;

public class Solution
{
    public static void main(String[] args)
    {
        //пункт 2
        Human grandFather1 = new Human("Александр", true, 60, new ArrayList<Human>(Arrays.asList(father)));
        Human grandFather2 = new Human("Михаил", true, 65, new ArrayList<Human>(Arrays.asList(mother)));
        Human grandMother1 = new Human("Мария", false, 55, new ArrayList<Human>(Arrays.asList(father)));
        Human grandMother2 = new Human("Наталья", false, 60, new ArrayList<Human>(Arrays.asList(mother)));
        Human father = new Human("Евгений", true, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));
        Human mother = new Human("Евгения", false, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));
        Human child1 = new Human("Саша", false, 8);
        Human child2 = new Human("Ирина", false, 10);
        Human child3 = new Human("Андрей", true, 15);
        System.out.println(grandFather1);
        System.out.println(grandFather2);
        System.out.println(grandMother1);
        System.out.println(grandMother2);
        System.out.println(father);
        System.out.println(mother);
        System.out.println(child1);
        System.out.println(child2);
        System.out.println(child3);

    }

    public static class Human
    {
        //пункт 1
        String name;
        boolean sex;
        int age;
        ArrayList<Human> children;

        public Human(String name, boolean sex, int age){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        public Human(String name, boolean sex, int age, ArrayList<Human> children){
            this.name = name;
            this.sex = sex;
            this.age = age;
            this.children = children;
        }

        public String toString()
        {
            String text = "";
            text += "Имя: " + this.name;
            text += ", пол: " + (this.sex ? "мужской" : "женский");
            text += ", возраст: " + this.age;

            int childCount = this.children.size();
            if (childCount > 0)
            {
                text += ", дети: "+this.children.get(0).name;

                for (int i = 1; i < childCount; i++)
                {
                    Human child = this.children.get(i);
                    text += ", "+child.name;
                }
            }

            return text;
        }
    }

}

не работает вот это место
Human grandFather1 = new Human("Александр", true, 60, new ArrayList<Human>(Arrays.asList(father)));
        Human grandFather2 = new Human("Михаил", true, 65, new ArrayList<Human>(Arrays.asList(mother)));
        Human grandMother1 = new Human("Мария", false, 55, new ArrayList<Human>(Arrays.asList(father)));
        Human grandMother2 = new Human("Наталья", false, 60, new ArrayList<Human>(Arrays.asList(mother)));
        Human father = new Human("Евгений", true, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));
        Human mother = new Human("Евгения", false, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));

голову сломал, не понимаю, как правильно добавить элементы в список при инициации
объясните пожалуйста, что не так делаю

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

Alejandro_Kolio
Создайте 3 листа, например так:
ArrayList<Human> children = new ArrayList<Human>();
        ArrayList<Human> parents = new ArrayList<Human>();
        ArrayList<Human> family = new ArrayList<Human>();

а далее через эти листы добавляйте элементы в листы.

2. Вот тут,
System.out.println(grandFather1);
        System.out.println(grandFather2);
        System.out.println(grandMother1);
        System.out.println(grandMother2);
        System.out.println(father);
        System.out.println(mother);
        System.out.println(child1);
        System.out.println(child2);
        System.out.println(child3);

вы пишите sout столько раз, а что если вам надо 100 раз печатать, тоже будете 100 раз писать?
Выводите в цикле foreach. и читабельнее и легче
e_consul
Спасибо за подсказку.
Явное объявление списков — очевидное решение. Я про него знаю, конечно. Я встречал инете описания передачи элементов сразу при вызове конструктора, но реализовать вот не могу (.
Вот про foreach можно поподробнее? Многократное повторение кода напрягает конечно, но я не нашел применения foreach для обычных переменных, только для коллекций. Просветите?
Alejandro_Kolio
так именно элементы коллекции и выводите.
for(Human item : family){
    //тут выводите ваш sout(item);
}
e_consul
  • e_consul
  • 0
  • Комментарий отредактирован 2016-03-14 18:36:07 пользователем e_consul
Ну, условия задачи не запрещают создания объектов в коллекции. Но разница в длине кода здесь не столь велика, чтобы заморачиваться. Мал еще ) Просто не подумал об этом ) Дальше, наверно, будут более утрированные задачи, которые сильнее заставят думать над оптимизацией.
e_consul
Разобрался с ArrayList.
Правильно делать в таком порядке:
Human child1 = new Human("Саша", false, 8);
        Human child2 = new Human("Ирина", false, 10);
        Human child3 = new Human("Андрей", true, 15);
        Human father = new Human("Евгений", true, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));
        Human mother = new Human("Евгения", false, 35, new ArrayList<Human>(Arrays.asList(child1, child2, child3)));
        Human grandFather1 = new Human("Александр", true, 60, new ArrayList<Human>(Arrays.asList(father)));
        Human grandFather2 = new Human("Михаил", true, 65, new ArrayList<Human>(Arrays.asList(mother)));
        Human grandMother1 = new Human("Мария", false, 55, new ArrayList<Human>(Arrays.asList(father)));
        Human grandMother2 = new Human("Наталья", false, 60, new ArrayList<Human>(Arrays.asList(mother)));

Логично же, что необъявленные объекты не могут использоваться.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.