Ответов полно, переписать их - себя обмануть, я сам к этому не пришел.
Ответьте пожалуйста мне на мои вопросы:
1. Что означает вопрос: "реализовать метод" ? мне нужно написать только его, или мне нужно запустить его с метода main ?
2. Если написано "//напишите тут ваш код" то мне там и объекты создавать?
3. Нужно ли здесь создавать объекты вообще ?
4. Что означает конструкция fight(Cat anotherCat) ? методу fight передается параметр anotherCat который принадлежит классу ? Пожалуйста напишите подробно или ссылку где почитать.
5.Что означает конструкция сравнения if(this.age>anotherCat.age) - сравнить переменную класса и параметра метода? Они разве равносильны для сравнения, или anotherCat можно считать за созданный объект с методе ? Пожалуйста напишите подробно или ссылку где почитать.
6.Пункты 4. 5. сработают без создания объектов ?
Пожалуйста пункты 4 и 5 это наверное основа миропонимания для новичка! Объясните их пожалуйста !
Андрей
20 уровень
Пожалуйста помогите!
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Андрей
12 ноября 2019, 17:03
И тут меня осенило ! Нам нужно написать метод, для того чтобы он привел во взаимодействие два объекта, и не какие-то, а те у которых переменные соответствуют по количеству и типу переменным класса Cat. А уже вызывать эти методы будет кто-то в "main" путем взаимодействия объектов, как на самом нижнем примере в 4 лекции: catVaska.fight(catBarsik); - т.е. это приведение во взаимодействие объектов, когда какой-то один catVaska "вызывает" какой-то другой catBarsik померятся "параметрами", а метод который нам тут нужно написать fight(Cat anotherCat), это и есть этот "вызов".
Теперь еще можно было бы не понять конструкцию if(this.age>anotherCat.age), получается она сравнивает параметры какого-то "anotherCat" просто с переменными класса Cat, которые даже не имеют значений, что тогда сравнивать? Но не понять не даст лекция 1 уровня 4, где сказано: при вызове метода в виде «объект» точка «имя метода», на самом деле вызывается метод класса, в который первым аргументом передаётся тот самый объект. Внутри метода он получает имя this. Именно с ним и его данными происходят все действия. Иными словами в нашей ситуации конструкция if(this.age>anotherCat.age), которую я подсмотрел в комментариях и до которой сам никогда бы не додумался говорит нам: сравниваешь возраст первого объекта "this" (нашего catVaska) с возрастом другого объекта "anotherCat" (нашего catBarsik). Напомню, что объектов можно и не создавать, это так для лучшего понимания.
Подтвердите, пожалуйста будьте добры, что из этого так, а что не так. + Вам в карму !
+1
hidden #598481
12 ноября 2019, 17:32
Все верно!
Теперь, когда тебе ясна концепция взаимодействия разных объектов через метод, осталось подумать, как именно нужно сравнить параметры, чтобы удовлетворить требованиям задачи. Другими словами, реализовать метод fight.
0
Андрей
12 ноября 2019, 17:03
VK я Вам действительно благодарен за столь объемный ответ. Позволь переспросить, как говорится раз уж такое дело.
Здесь в "fight(Cat anotherCat)" класс Cat указан перед anotherCat также как и "int" перед "age" в setAge(int age) например, т.е. "anotherCat" это имяПеременной и параметр метода и аргумент метода, а "Cat" тот что перед "anotherCat", это ТипПеременной и класс? Можно ли отсюда сделать вывод, что аргументом метода fight(Cat anotherCat) является объект "anotherCat" класса Cat, который по умолчанию содержит в себе три переменные (age, weight, strength), и это обстоятельство освобождает нас от необходимости создания нового объекта для сравнения, как в примере if(this.age>anotherCat.age)?
0
YuriyExpert
12 ноября 2019, 14:45решение
1) Реализовать метод, это значит написать тело метода (код, который будет реализовывать то, для чего этот метод был создан).
2) Это просто комментарий, который помогает найти место в программе где от Вас требуется что-то сделать. Это не обязательно п.1.
3) В этой задаче не требуется.
4) boolean fight(Cat anotherCat) это часть сигнатуры метода, которая состоит из типа возвращаемого значения (boolean), имени метода (fight), типа передаваемого в метод параметра (Cat) и имени этого параметра (anotherCat)
5) this это указатель внутри объекта на самого себя.
6) Не совсем понятен вопрос. Да, валидатор примет корректную реализацию всего что описано в условии с пустым методом main (т.е. программу которая ничего не делает при запуске).
+2
hidden #598481
12 ноября 2019, 14:42решение
Хорошие и правильные вопросы.
Задача требует только реализовать метод. Поэтому создавать объекты и смотреть как метод работает ты можешь для самоконтроля, на прохождение тестирования это повлиять не должно. Впоследствии ты не раз столкнешься с примечаниями "метод main не участвует в тестировании". Могу ошибиться, но кажется это одна из таких задач.
Поэтому тебе необходимо написать тело метода, чтобы он возвращал true или false согласно условию задачи. Это и означает фраза "реализовать метод". Внутри метода объекты однозначно создавать не надо. Внутри метода будут использоваться только два объекта: this, у которого метод будет вызван, и anotherCat, который является аргументом метода. Если хочешь создать объекты, делай это внутри main. Именно этот метод выполняется при запуске.
Ты правильно пишешь, "fight(Cat anotherCat)" - это название метода и его параметр - переменная anotherCat класса Cat. Просто ты привык до этого в основном видеть в качестве параметров переменные "базовых" классов int или String, а тут твой объект класса Cat будет сравниваться со вторым объектом тоже класса Cat.
Нужно понять ключевые отличия между классом и объектом. Класс - это описание, шаблон того, каким может быть объект. В частности в этой задаче ты описываешь класс котов таким образом, обозначая, что у каждого кота (объекта класса Cat) могут быть свои параметры age, weight, strength в виде целых чисел. Заметь, ты не говоришь, какие именно значения они будут иметь, ты просто создаешь пустые поля.
Наверное, трудно понять эту задачу абстрактно, не создавая объекты на практике, поэтому я все же советую создать тебе двух котов в методе main. После того, как ты создашь и заполнишь их параметры, ты сможешь вызвать для каждого из них метод fight. Например, используя запись
tommy.fight(jimmy) ты вызовешь метод fight у кота по имени tommy, а кота по имени jimmy передашь в качестве аргумента. Внутри метода на этого кота будет ссылаться переменная anotherCat
+2
hidden #598481
12 ноября 2019, 14:49решение
Возвращаюсь к пятому вопросу.
Таким образом, ты создал двух котов, у каждого из которых есть свои age, weight и strength.
Сравнивая эти значения правильным образом, ты можешь вычислить кто из котов является сильнее и соответственно победит в драке, в зависимости от этого вернешь true или false.
Реализуя метод fight, ты описываешь логику метода. Ты можешь создать и двадцать котов, и устроить поединок между каждой парой из них, а можешь и не создавать их вовсе - логика ведения боя от этого не изменится.
Проведу такую аналогию. Представь, что тебе даны черенок от лопаты и отдельно полотно (наконечник) лопаты, и дана задача сделать инструмент, которым можно выкопать яму. При этом тебя не просят выкапывать котлована или даже ямы: нужен только сам инструмент.
Реализуя метод, ты "собираешь лопату". Создавая объекты и вызывая извне метод fight, ты выкапываешь ямки. Копать тебя не просят, но это тоже полезно: вдруг ты неправильно собрал лопату, и она сломается на первой же яме?.. 🙃
+2