Итак, у меня есть небольшой проект «Виртуальный мир» в Java, в котором есть четыре животных (они расширяют класс Организм). У каждого из них (Антилопа, Лиса, Черепаха, Волк) есть поля Инициатива, Сила и Возраст (все целые). Я хочу поместить их в массив, а затем отсортировать их с наивысшей Инициативой сверху, и если инициатива одинакова для обоих животных - чем старше, тем выше. Чтобы сравнить их, мой абстрактный класс «Организм» реализовал интерфейс Comparable, и я переопределил метод compareTo, поэтому он выглядит следующим образом:
@Override
public int compareTo(Organism anotherOrganism) {
int compareValue = 0;
if (this.getInitiative() > anotherOrganism.getInitiative()){
compareValue = 1;
} else if (this.getInitiative() < anotherOrganism.getInitiative()){
compareValue = -1;
} else if (this.getInitiative() == anotherOrganism.getInitiative()){
if (this.getAge() > anotherOrganism.getAge()){
compareValue = 1;
} else {
compareValue = -1;
}
}
return compareValue;
}
Я ввел этих животных в массив в следующем порядке (число в скобках указана их фактическая инициатива): Fox (7) -> Turtle (1) -> Antelope (4) -> Wolf (5) и затем использовали
Collections.sort(organismList);
, ожидая, что это приведет к
Fox, Wolf, Antelope, Turtle
вместо этого я получил
Wolf, Antelope, Turtle, Fox
Что здесь пошло не так? Очевидно, что в Animals также реализован метод сравнения (они ссылаются на super.compareTo от Organism)
Редактировать: Да, поэтому ниже приведены советы о том, что код довольно хороший, я удалил любую Инициативу из животных (поле оставлено пустым), и я все еще получаю тот же вывод. Понятия не имею, почему ....