我需要帮助对包含我创建的两种不同类型的类的数组进行排序。我的两个类(class)是“人类”,有名字和年龄,然后我有一个“物理学家”类(class),它继承自人类,但也有他们开始学习时的“开始年份”字段。像这样的事情:
public class Human implements Comparable<Human> {
private int age;
private String name;
public Human(int agein, String namein) {
age = agein;
name = namein;
}
public int compareTo(Human other) {
return Integer.compare(this.age, other.age);
}
}
public class Fysiker extends Human {
private int year;
public Fysiker(int startYear, int ageIn, String nameIn){
super(ageIn, nameIn);
}
public int compareTo(Fysiker other) {
if(other instanceof Fysiker && this.getAge() == other.getAge() ) {
return Integer.compare(this.year, other.year);
}
else {
return Integer.compare(this.getAge(), other.getAge());
}
}
}
我想要的是,当我创建一个包含人类和物理学家的数组并对它进行排序时,我希望它按年龄排序,如果两个物理学家年龄相同,那么他们应该按他们的年份排序。例如这样:
输入:
姓名:Alex,年龄:32,年份:2007
姓名:Nils,年龄:30,年份:2008
姓名:Anders,年龄:32,年份:2003
姓名:Erik,年龄:18。
姓名:Olof,年龄:31。
排序数组:
姓名:Erik,年龄:18。
姓名:Nils,年龄:30,年份:2008
姓名:Olof,年龄:31。
姓名:Anders,年龄:32,年份:2003
姓名:Alex,年龄:32,年份:2007
我的compareTo方法错了吗?或者为什么它不起作用? 我没有收到任何错误,数组只是按年龄排序,然后什么也没有发生。
非常感谢您的帮助!
最佳答案
这个方法:
public int compareTo(Fysiker other) {
if(other instanceof Fysiker && this.getAge() == other.getAge() ) {
return Integer.compare(this.year, other.year);
}
else {
return Integer.compare(this.getAge(), other.getAge());
}
}
永远不会被调用,因为你有一个 Human 数组,所以签名不匹配(正如 Arsen 在评论中提到的)。
这应该有效:
public int compareTo(Human other) {
if(other instanceof Fysiker && this.getAge() == other.getAge() ) {
return Integer.compare(this.year, ((Fysiker) other).year);
}
else {
return Integer.compare(this.getAge(), other.getAge());
}
}
关于java - 对具有两个不同对象的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699325/