gpt4 book ai didi

java - 对具有两个不同对象的数组进行排序

转载 作者:行者123 更新时间:2023-12-01 10:19:31 24 4
gpt4 key购买 nike

我需要帮助对包含我创建的两种不同类型的类的数组进行排序。我的两个类(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com