public boolean fight(Cat anotherCat) {
Здесь параметром метода выступает новый объект. Кстати , па разве так можно, он вроде еще не создан. Допустим мы внутри метода его создадим. но все равно, как мы будем мериться силой. Кот только один новый второй, а первого откуда брать? Я бы метод назвал бы так public boolean fight(Cat cat1; Cat cat2) {
Андрей
15 уровень
котов два, а метод имеет только один параметр ,это как?
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
29 декабря 2019, 07:38решение
Один кот - это тот, у которого метод будет вызван (кот this), другой - тот, которого передадут в параметрах (anotherCat).
Какая сейчас разница, созданы эти объекты или нет.
Главное, чтобы они существовали на момент вызова этого метода.
В случае
у тебя будет уже 3 кота (включая this). Или же надо будет делать метод статическим. +3
Андрей
29 декабря 2019, 15:48
Почему this, а не например Васька. Откуда вообще взялось имя this. Мы проходили это ключевое слово в контексте сеттеров и геттеров. Тут то оно при чем?
0
Ksenia Volkova Java Developer в DXC Master
29 декабря 2019, 15:53
Потому что this - это ключевое слово, которое указывает на объект, у которого был вызван метод.
Метод может быть сеттером, геттером или любым другим.
При этом this может оказаться и Васькой, и Мурзиком - смотря у кого вызван метод.
0
Андрей
29 декабря 2019, 17:35
правильно ли я вас понял, что для вызова метода fight я должен предварительно создать пару объектов котов, иначе невозможно. Примерно так. Есть класс Cat. Создаем котов Cat cat1= new Cat; Cat cat2= new Cat; И только после этого любой объект -кот может вызвать метод cat1.fight(cat2) или наоборот. И объект , который вызывает метод в процедуре метода называется this.Cat? Или thisCat?
0
АлександрExpert
29 декабря 2019, 17:56
все правильно, кроме последнего предложения.
к объекту, на котором вызван метод, изнутри объекта можно обращаться с помощью указателя this
если вы вызовете
cat1.fight(cat2)
значит внутри метода fight this будет указывать на cat1. И к полям объекта можно будет обратиться например так: this.strength
0
Ksenia Volkova Java Developer в DXC Master
29 декабря 2019, 18:00
А cat2, соответственно, внутри метода попадет в локальную переменную anotherCat, и к его полям мы будем обращаться как anotherCat.strength и т. д.
0
Андрей
29 декабря 2019, 18:41
описал метод fight.
public boolean fight(Cat anotherCat) {
int i =0;
if (anotherCat.age >= this.age) i=i+1;
if (anotherCat.weight>= this.weight) i=i+1;
if (anotherCat.strength>= this.strength) i=i+1;
return (2-i>0);
}
Синтаксически компилятор не имеет никаких претензий. Я пытаюсь вначале фигурных скобок создать новый объект Cat anotherCat = new Cat, компилятор ругается , просит ввести круглую скобку. Может не надо создавать другого кота и так сойдет?
0
Ksenia Volkova Java Developer в DXC Master
29 декабря 2019, 18:45
Зачем же в методе создавать кота, которого ты и так получаешь в качестве параметра?
(Метод, кстати, все равно некорректный, у тебя соперник получает баллы при равенстве параметров)
0
Андрей
29 декабря 2019, 19:20
Ксения, согласен, написал плохо, пришлось переделать и тест прошел))). Для полного счастья осталось выяснить, а что это за метод такой, без параметров public Cat() {} который стоит перед методом "драка"?
public Cat() {
}
public boolean fight(Cat anotherCat) {
int i =0;
if (anotherCat.age < this.age) i=i+1;
else if(anotherCat.age > this.age ) i=i-1;
if (anotherCat.weight < this.weight) i=i+1;
else if(anotherCat.weight > this.weight ) i=i-1;
if (anotherCat.strength < this.strength) i=i+1;
else if(anotherCat.strength > this.strength ) i=i-1;
return (i>0);
}
public static void main(String[] args) {
}
}
0
Ksenia Volkova Java Developer в DXC Master
29 декабря 2019, 20:01
public Cat() - это конструктор =)
0
Андрей
29 декабря 2019, 21:33
Ксения, огромное спасибо)
0