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

标签 java arrays sorting

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

相关文章:

java - Clojure:协议(protocol)中没有方法的实现

Java - Logback显示测试用例名称

java - 获取浏览器的 Java 插件版本?

java - 对数组列表使用 contains() 方法时出现问题

c - 我应该如何在 C 结构中声明字符串?

javascript - 获取层次结构的级别

PHP 通过单击对表格进行排序,然后再单击一次进行反向排序

c - malloc 结构指针数组

php - 如何在数组php中的值的开头和结尾添加单引号

java - 带有用于保持计数排序的索引的 PriorityQueue