task 0824 или самое прекрасное задание. Работает правильно но не проходит проверку

и ко всему прочему, этот код проходит «типа компиляцию» на сервере однако компилируя джава файл через cmd (javac) компилятор ругается на созданный «типа разработчиками» переопределенный метод класса Human, а именно — метод toString()
Так как соответствовать тексту задания КОТОРОЕ ВОЗМОЖНО ПОНЯТЬ ЛИШЬ ИМЕННО ТАК КАК НУЖНО ПОТОМУ ЧТО ВСЕ РАСПИСАНО ИДЕАЛЬНО И ВОПРОСОВ ПО ЗАДАНИЮ СОВЕРШЕННО НЕ ВОЗНИКАЕТ... нужно, я не менял исходный «toString()»
в общем вот текст. Да я не создавал конструкторы ведь
Класс Human должен содержать один метод.

И выводил всех объектов замечательного класса Human по отдельности. А вдруг порядок важен?...
Код:
package com.javarush.task.task08.task0824;

/* 
Собираем семейство
*/
import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) {
        //напишите тут ваш код
        //@TODO
        //    this.name = name;
        //    this.sex = sex;
        //    this.age = age;
        //    this.children = list;
        Human r1 = new Human();
        r1.name = "n1";
        r1.sex = true;
        r1.age = 12;
        Human r2 = new Human();
        r2.name = "n2";
        r2.sex = false;
        r2.age = 11;
        Human r3 = new Human();
        r3.name = "n3";
        r3.sex = true;
        r3.age = 12;
        ArrayList<Human> childrens = new ArrayList<Human>();
        childrens.add(r1);
        childrens.add(r2);
        childrens.add(r3);
        Human MR = new Human();
        MR.name = "MR";
        MR.sex = false;
        MR.age = 30;
        MR.children = childrens;
        Human OR = new Human();
        OR.name = "OR";
        OR.sex = true;
        OR.age = 26;
        OR.children = childrens;
        ArrayList<Human> Rchildrens = new ArrayList<Human>();
        Rchildrens.add(MR);
        ArrayList<Human> ORchildrens = new ArrayList<Human>();
        Rchildrens.add(OR);
        Human MMR = new Human();
        MMR.name = "MMR";
        MMR.sex = false;
        MMR.age = 70;
        MMR.children = Rchildrens;
        Human OMR = new Human();
        OMR.name = "OMR";
        OMR.sex = true;
        OMR.age = 66;
        OMR.children = Rchildrens;
        Human MOR = new Human();
        MOR.name = "MOR";
        MOR.sex = false;
        MOR.age = 71;
        MOR.children = ORchildrens;
        Human OOR = new Human();
        OOR.name = "OOR";
        OOR.sex = true;
        OOR.age = 67;
        OOR.children = ORchildrens;
        //Human[] humanity = {r1,r2,r3,MR,OR,MMR,OMR,OOR,MOR};
        System.out.println(r1.toString());
        System.out.println(r2.toString());
        System.out.println(r3.toString());
        System.out.println(OR.toString());
        System.out.println(MR.toString());
        System.out.println(OOR.toString());
        System.out.println(MOR.toString());
        System.out.println(OMR.toString());
        System.out.println(MMR.toString());
    }

    public static class Human {
        //напишите тут ваш код
        String name;
        boolean sex;
        int age;
        ArrayList<Human> 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;
        }
    }

}

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

zzzz
  • zzzz
  • 0
  • Комментарий отредактирован 2017-07-18 16:00:25 пользователем zzzz
Первое, что очень бросается в глаза (возможно из-за этого и не проходит проверку) — это использование полей объекта «напрямую».
Добавьте: либо конструктор, в котором устанавливаются значения полей на стадии создания объекта, либо setter-ы, при помощи которых будете добавлять значения полям после создания объекта.

Второе:
ArrayList<Human> Rchildrens = new ArrayList<Human>();
названия полей в Java принято начинать с маленькой буквы.
DeepRiver
в общем вот текст. Да я не создавал конструкторы ведь
Класс Human должен содержать один метод.

процитирую сам себя=)
Ваши замечания истинны, так, как написал код я — писать не следует, однако к моей проблеме никакого отношения не имеют.
zzzz
  • zzzz
  • 0
  • Комментарий отредактирован 2017-07-18 16:22:09 пользователем zzzz
компилируя джава файл через cmd (javac) компилятор ругается на созданный «типа разработчиками» переопределенный метод класса Human, а именно — метод toString()
Если вы внимательно почитаете ошибку с которой ругается компилятор, и внимательно посмотрите код метода toString(), то вы заметите
int childCount = this.children.size();
— эта строчка в вашей реализации не работает для детей (вот тут вы получаете NPE).
DeepRiver
Я знаю! И я исправлял, я делал (if this.children!=null) а потом text += ", дети: " и после for с перебором всех «детей», суть в том что компилятор сайта принимает исходный вариант, и, как я говорил, метод toString() написан в задании изначально, т.е. не мной.
zzzz
  • zzzz
  • +3
  • Комментарий отредактирован 2017-07-18 16:48:40 пользователем zzzz
эм, вы не стой стороны на проблему смотрите
все что вам нужно — это положить детям пустой лист детей
и тогда
this.children.size();
будет возвращать 0, вместо падения с NPE.

Сделаю 1/3 работы за вас:
r1.children = new ArrayList<Human>();
DeepRiver
сделал
<br />
public static class Human {
        //напишите тут ваш код
        String name;
        boolean sex;
        int age;
        ArrayList<Human> children = new ArrayList<Human>();

Компилируется смд, выводит все нормально, однако задача не проходит проверку)
DeepRiver
решилось, одна переменная была названа неправильно) :D спасиб
zzzz
всегда пожалуйста. ))
MaSk
Ребят подскажите почему проверку не проходит.
Вроде все условия выполнены да и выводит все верно в консоль.
package com.javarush.task.task08.task0824;

/* 
Собираем семейство
*/

import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) {
        //напишите тут ваш код
        ArrayList<Human> family = new ArrayList<>();
        for (Integer i = 0; i < 9; i++) {
            family.add(new Human());
            family.get(i).name = i.toString();
            family.get(i).age = i*10+1;
            if(i == 0 || i == 1 || i == 2)
                family.get(i).sex = true;
            if(i == 3 || i == 4)
            {
                family.get(i).sex = i == 3;
                for (int j = 0; j < 3; j++) {
                    family.get(i).children.add(family.get(j));
                }
            }
            if(i == 5 || i == 6) {
                family.get(i).sex = i == 5;
                family.get(i).children.add(family.get(3));
            }
            if(i == 7 || i == 8) {
                family.get(i).sex = i == 7;
                family.get(i).children.add(family.get(4));
            }
        }
        for (Human h : family) {
            System.out.println(h);
        }
    }

    public static class Human {
        //напишите тут ваш код
        String name;
        boolean sex;
        int age;
        ArrayList<Human> children = new ArrayList<>();

        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;
        }
    }

}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.