所以我有一个java的“虚拟世界”项目,它有四种动物(它们扩展了有机体类)。每一种动物(羚羊、狐狸、乌龟、狼)都有一个主动性、力量和年龄的领域(所有的int)。我想把它们放在一个数组中,然后用最高的主动权排序,如果两种动物的主动权相等,那么年长的动物的主动权更高。为了比较这些,我的抽象类“有机体”实现了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;
}
我按以下顺序将这些动物输入数组(括号中的数字是它们的实际主动性):狐狸(7)->海龟(1)->羚羊(4)->狼(5),然后使用
Collections.sort(organismList);
希望这会导致
Fox, Wolf, Antelope, Turtle
我收到的不是这个
Wolf, Antelope, Turtle, Fox
这里出了什么问题?很明显,动物也实施了compareto方法(它们指的是来自生物体的super.compareto)
编辑:是的,下面的建议说代码相当好,我已经删除了动物的任何主动性(字段留空),我仍然得到了非常相同的输出。不知道为什么。。。。
3条答案
按热度按时间h5qlskok1#
我已经把代码扩展成了即食餐。它打印出预期的结果。
代码:
t3irkdon2#
你可以这样做:
z5btuh9x3#
假设initiative和age成员变量是公共的(您可以用getter替换),您可以在一行代码中实现所需的排序
请参见下面的完整示例