Репка

  • 16
  • Недоступна
Классическая террианская сказка рассказывает о любопытном механизме извлечения чрезмерно разросшихся корнеплодов из грунта. В научных работах он известен как «Babka za Dedku». Предлагаем вам углубиться в это земное ноу-хау и реализовать интерфейс RepkaItem в классе Person и метод, который выводит фразу типа ‘name за person‘
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (395)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Denis Malyshev QA в Sber
14 июня, 20:42
Логическую ошибку нашел сразу, эт несложно, а вот с методом pull поломал голову - никак не мог понять откуда мне взять имя через метод у вызываемого объекта....ответ нашел в комментах. Мне такие вроде бы очевидные решения в голову не приходят, видимо, сказывается перерыв в обучении около 6 месяцев...😥
Lyokha Blagodatskikh
Уровень 24, Ural, Russian Federation
11 июня, 02:25
Решить решил, но без комментариев валидатор удовлетворить не смог... в своём решении я переписал RepkaStory: namePadez = first.getNamePadezh(); second.setNamePadezh(namePadez); Всё работало идеально, но валидатор отвергал...
Blynchik Работает в Pegas Touristik
25 мая, 06:56
Вытащили репку!
milyasow
Уровень 30, Москва, Russian Federation
8 мая, 19:26
1) Не ломайте голову, реализация интерфейса RepkaItem нужна только для валидатора, на выполнение задачи никак не влияет, поскольку метод getNamePadezh() уже определен в классе Person. 2) Логическая ошибка в цикле состоит в том, что в реальных условиях второй участник цепочки должен тянуть за первого, только исправив это, сможете правильно реализовать метод pull(). А я лично не совсем понимаю, почему работает доступ к приватной переменной namePadezh у второго объекта, передаваемого в качестве аргумента, ведь мы получаем доступ к нему из метода первого (другого) объекта... То есть для меня идеальное решение, раз уж мы прописали геттеры и сеттеры, видится так:
System.out.println(this.getName() + " за " + person.getNamePadezh());
Но почему-то работает и так:
System.out.println(this.getName() + " за " + person.namePadezh);
milyasow
Уровень 30, Москва, Russian Federation
15 мая, 11:49
Приехал на машине времени, чтобы ответить самому себе в прошлом: Модификатор доступа private защищает доступ к полям только на уровне классов, но не инстансов одного и того же класса. Все объекты класса имеют доступ к приватным переменным и методам других объектов этого же класса точно так же, как если бы они были public. В частности, это позволяет сравнивать объекты класса между собой:
public boolean equals(Object obj) {
      return this.field == otherObj.field;
}
Pela
Уровень 29, Новосибирск, Russian Federation
6 мая, 08:49
Мышка не смогла подойти
Igor Petrashevsky
Уровень 34
1 мая, 23:37
ну, не медиум оно. незанудное изя
Artem Sokolov Android Developer в Oracle
22 апреля, 06:06
Жил-был Дед, Дед был крут, Был Дед богат, любил Дед труд! Есть у Деда честь, и Мерседес-Бенц, Есть что попить и есть, что поесть
Олег
Уровень 32, Москва, Russian Federation
15 апреля, 13:07
А еще можно в методе pull заменить параметр Person на String, а в методе tell метод first вызвать с параметром second.getNamePadezh. Работает также, но без выноса мозга.
Олег
Уровень 32, Москва, Russian Federation
15 апреля, 13:02
Почему в методе pull нельзя сделать так? name + " за " + namePadezh()
Igor Petrashevsky
Уровень 34
1 мая, 23:37
потому что namePadezh() возвращает void а не string
milyasow
Уровень 30, Москва, Russian Federation
8 мая, 18:54
потому что namePadezh() возвращает void а не string Иногда лучше жевать, чем комментировать. Относительно вашего вопроса: если вы напишете name + " за " +getNamePadezh(), то этот метод вызовется у this, которое неявно передается к вызову. И получится у вас весьма странная сказка:
Внучка за Внучку
Бабка за Бабку
Дедка за Дедку
Tolya Novikov
Уровень 35, Russian Federation
4 апреля, 20:52
Решил, но не понял, зачем тут приплели интерфейс, по моему он ни на что не влияет или я что-то недопонял?
Дмитрий
Уровень 33, Минск, Беларусь
9 апреля, 10:22
Такая же хрень!!! Ломал голову чё он делает как его прикрутить, потом зашёл с другого конца забыл про него. Сделал, всё заработало!! Сдаю на проверку, а валидатор мне: прикрутите интерфейс!!! Ну и чего? Прикрутил, тупо чтоб он был и на тебе пожалуйста!!! А так задачка прикольная!