Примерно как решить понимаю. Что логика алгоритма такова: 2 счетчика, ну и условия, при тру записываем результат в один счетчиак, соответственно при фолс в друой. В конце сравнивам какой счетчик больше и вывод победителя.
Сам не решил, подсмотрел решение. И не очень понимаю как стоятся эти условия, if (this.age > anotherCat.age), if (this.weight > anotherCat.weight), if (this.strength > anotherCat.strength). Почему this? Почему через точку оператор доступа после аргумента функции. Ну я примерно понимаю. Но сам бы не составил такие условия. Каким темам стоит уделить время? Что надо почитать, чтобы закрепить материал?
И если не сложно можно расписать дословно эту строку if (this.age > anotherCat.age) Почему именно так вызываются переменые котов.
и вот тут
Cat cat = new Cat();
cat.age = 3;
cat.weight = 5;
cat.strength = 8;
Cat anotherCat = new Cat();
anotherCat.age = 4;
anotherCat.weight = 6;
anotherCat.strength = 9;
System.out.println(cat.fight(anotherCat));
System.out.println(anotherCat.fight(cat));
В методе меин не понятны 2 последние строки. То что создали 2 экземпляра класса. И создали 2х котов, понятно. Через точку получили доступ к имени и массе - понятно. А вот вывод на экран не очень понятен, почему именно так пытаемся достучаться?
7
Pavel
7 уровень
Помогите разораться в задаче.
Решен
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Firuz
9 июня 2020, 05:45
Думаю , если хочешь чего то максимально круто , то тебе надо все делать на английском - имею ввиду что лучше читай все на английском , да сложно будет - но будешь лучше многих. Рекомендую Udemy - там есть хорошие курсы, но платные - примерно 900 рублей когда скидки идут(по выходным обычно) , и если нет возможность сейчас заплатить еще на другой курс - то смотри это видео (ключевое слово this) и после это все станет понятно.
А в этой задачке могу обЪяснить только таким способом каким я сам понимаю и тебе придется все равно смотреть то видео и понять лучше - у меня у самого были трудности на этой теме раньше - ок к делу --------------------------------> this.cat - это как бы дает понятие тебе о том что - это именно наш кот - ну если ты не хочешь использовать это например ты мог бы создать Cat myCat - но это неудобно и не комфортно - в этой задачке это легко реализовать - в будущем будет такие задачки что не захочешь создавать экземпляр какого то класса - мы ключевым словом указываем - возраст именно нашего кота если больше другого кота то будет так так так - иначе так так так , ну ты смотри то видео которую я тебе дал все станет понятно
+2
Pavel
9 июня 2020, 11:34
Кстати на udemy куплен курс. Андроид правда. Но он включает в себя базу джавы. Купил по скидке за 9 баксов. Но основы джавы тут хотел освоить. А потом андроид. В дальнейшем на мобильную разработку планирую
Спасибо.
+3
Ksenia MarioMaster
8 июня 2020, 19:18полезный
Почему именно так вызываются переменые котов.
this.age > anotherCat.age
в тебе є клас Cat, в якого є поле age.
в цьому ж класі є метод, який визначає чи поточний (this) кіт виграє в іншого кота.
ти береш нашого кота Мурчика, викликаєш в нього метод fight (який порівнює нашого (this) Мурчика з іншим котом. коли ти передаєш кота Котанчика в метод public boolean fight(Cat anotherCat) то його звати уже anotherCat ( в межах цього методу).
Що читати? читати філософію джава. Там много.
Спробуй зробити метод fight статичним, щоб він приймав двох котів, а повертав того, який виграв.
типу
0
Pavel
9 июня 2020, 17:58
Велике дякую, Ксенiя)
0
Ksenia MarioMaster
8 июня 2020, 18:57решение
this - це вказівка, що використовуємо поточний об'єкт.
якщо в тебе нема однакових назв - то якби його можна й не використовувати. Я не знаю чи прийме валідатор, але можна видалити this і написати if (age > anotherCat.age).
+1
Pavel
9 июня 2020, 18:48
Только вот все-равно не очень понятно с этой проверкой if (this.age>anotherCat.age).
Вот смотри. У нас есть клас Cat. В нем мы создали публичную переменную age.
В классе Cat есть метод public boolean fight(Cat anotherCat), тоесть переменная типа Cat с именем anotherCat.
Но от куда в логике if (this.age>anotherCat.age). взялось 2 кота?
методе fight нет же переменных с именем age? Тогда почему this.age это один кот, а anotherCat.age второй?
Я бы понял, если бы мы в main создали 2 экземпляра класса Cat и присвоили бы им имена, проинициализировали возраст. Через имя кота экземпляра класса, через точку достучались бы до возраста кота и сравнили бы с возрастом другого кота. И уже в зависимости от победы, проинкрементировали счетчик одного кота или другого.
А вот от куда в методе драка берется эта логика двух котов, вот в упор не пойму.
0
Ksenia MarioMaster
9 июня 2020, 21:11
Опис групи об'єктів - це клас,
їх характеристики - це поля,
їх дії - це методи.
Метод записується так:
тип_результату назваМетоду (параметри) {
}
Наприклад,
Тут зайшли в мейн, створили котика,
викликали на конктретному котику метод setName(String nameCat).
цей метод приймає 1 параметр типу String,( ти там пиши що хочеш, але він має бути строкою).
0
Ksenia MarioMaster
9 июня 2020, 21:15
тепер дивимся що написано в твоєму коді:
тут створили два кота.
взяли cat (один кіт) і у нього визвали метод fight()
в метод fight передали anotherCat (другий кіт).
Можливо не ясно пояснила, але старалась)) ти пиши 0
Pavel
10 июня 2020, 06:12
Ну тут ты описываешь работу main, правильно?
Создаешь 2 ссылочные переменные типа Cat и присваеваешь объекты ссылочным переменным. А в третьей строке вызываешь у первого кота метод fight со вторым котом в параметрах.
Тоесть в методе fight мы сравниваем уже созданные экземпляры класса Cat созданные в Main? Это не шаблон доя сравнения, а мы сравниваем конкретно созданных котов? Тоесть если я захочу сравнить других котов. Мне надо будет создать новый экземпляр класса (нового кота) и подставить его в сравнение в метод fight?
Правильно я понимаю? Или я окончательно запутался?
Спасибо, что уделяешь мне время)
0
Ksenia MarioMaster
10 июня 2020, 07:35
Умнічка, правильно!
+1
Pavel
10 июня 2020, 08:23
Хорошо. С этим разобрался. Если пытаться достучаться до котов по именам, через экземпляры класса.
А вот тут (this.age>anotherCat.age)
this.age - тут мы ссылаемся на возраст кота через конструктор без параметров с помощью this.
anotherCat.age - а тут на прямую к переменной класса Cat? Или как?
0
Ksenia MarioMaster
10 июня 2020, 11:35
this.age - напряму до age поточного кота ( в якого ти викликав цей метод)
anotherCat.age - напряму до age кота anotherCat
+1
Pavel
10 июня 2020, 12:08
Более-менее сложилась в голове картинка, что да как. Это же еще не статичный метод и он не может быть вызван сам по себе, а толтко у какого нибудь объекта класса Cat. Поэтому обращаемся к объекту с помощью this к коту 1. Метод принимает параметр. И это уже второй кот
+2