Почему у age надо поставить this, а у anotherCat.age не надо?
if (this.age > anotherCat.age)
countCat1++;
else
if (this.age < anotherCat.age)
countCat2++;
if (this.weight > anotherCat.weight)
countCat1++;
else
if (this.weight < anotherCat.weight)
countCat2++;
if (this.strength > anotherCat.strength)
countCat1++;
else
if (this.strength < anotherCat.strength)
countCat2++;
kupaka
15 уровень
Не пойму почему такой код. Почему у age надо поставить this, а у anotherCat.age не надо?
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Andrey PirogovExpert
14 мая 2020, 10:30
Ну для начала было бы не плохо целую задачу прикреплять, так было бы проще.
Если очень кратко ответить на твой вопрос
то this указывает на объект который вызывает метод.
Т.е. берем двух котов Cat1 Cat2. Вызываем метод fight у Cat1, но драться то ему нужно с кем то поэтому в качестве аргумента передаем ему Cat2. Дальше у тебя идет логика сравнения, но как разобраться где какой кот и где чей параметр (age, strength и т.д) ? this укажет на Cat1 и обратиться к переменной "age" именно Cat1 , а что бы обратиться к переменной "age" Cat2, нужно обратиться уже к объекту Cat2
0
kupaka
14 мая 2020, 11:15
public class Cat {
public int age;
public int weight;
public int strength;
public Cat() {
}
public boolean fight(Cat anotherCat) {
int countCat1 = 0, countCat2 = 0;
if (this.age > anotherCat.age)
countCat1++;
else
if (this.age < anotherCat.age)
countCat2++;
if (this.weight > anotherCat.weight)
countCat1++;
else
if (this.weight < anotherCat.weight)
countCat2++;
if (this.strength > anotherCat.strength)
countCat1++;
else
if (this.strength < anotherCat.strength)
countCat2++;
if (countCat1 >= countCat2)
return true;
else
return false;
}
public static void main(String[] args)
{
Cat cat1 = new Cat();
cat1.weight = 2;
cat1.age = 1;
cat1.strength = 5;
Cat cat2 = new Cat();
cat2.weight = 1;
cat2.age = 2;
cat2.strength = 1;
System.out.println(cat1.fight(cat2));
System.out.println(cat2.fight(cat1));
Решенные задачи, вроде, запрещено писать.
0
kupaka
14 мая 2020, 11:17
Почему нельзя сравнить cat1.age < cat2.age ?
0
Andrey PirogovExpert
14 мая 2020, 11:23полезный
Можно, но тогда немного логика поплывет,
Допустим у тебя 50 котов и начнем состязании:
если у тебя внутри будет cat1.age < cat2.age
тогда всегда будешь сравнивать cat1 с котом который придет в аргументе и вообще нужно быть уверенным, что cat1 существует.
А так ты вызываешь метод у объекта допустим cat49 аргументом в этот метод предаешь cat5, и у тебя сражение между 49 и 5 котом
+1
Фантомас
14 мая 2020, 10:24
Потому, что переменная anotherCat уже от другого/нового объекта Cat, а не от нашего (this).
0
kupaka
14 мая 2020, 11:19
Мы сравниваем параметры двух конкретных объектов (котов). Почему на параметры первого объекта пишем this на параметры второго нет?
0
Фантомас
14 мая 2020, 13:07полезный
При использовании this мы обращаемся именно к нашему текущему объекту. Любые иные уже поэтому не будут this.
Советую почитать эту статью.
+1