0

我正在创建一个对象类型的数组。我有两个不同的类,Employee 和 Person,它们具有简单的属性,如姓名、薪水(Employee)名字、出生日期(Person)。我需要将一些 Employee 和 Person 对象添加到我的数组中并比较数组中的某些内容。例如,从数组中检索最年轻的人。

public class Driver {

public static void main(String[] args) {
    Employee e1 = new Employee("Den", 2000);

    Employee e2 = new Employee("Jon", 1004);

    Person p1 = new Person("Pen", "Tel", "1993");
    Person p2 = new Person("Jon", "Smith", "1933");

    Object [] crr;
    crr = new Object[4];
    crr[0] = e1;
    crr[1] = p1;
    crr[2] = p2;
    crr[3] = e2;
    System.out.println();
    new Driver().printObjectArray("array crr", crr);

}
public void printObjectArray(String arrayName, Object [] array){
    for (int i = 0; i < array.length; i++){
        System.out.println(arrayName + "["+ i +"]" + array[i].toString());
    }
    System.out.println("--------------------");
}   
}

我将如何比较阵列上的某些东西。就像打印最年轻的人一样,这意味着我必须查看数组并查看它是否是 Person 对象,然后在这些对象上获取 DateOfBirth 并打印最年长的人。

4

4 回答 4

1
public Person getYoungestPerson(Object [] arr){

    int i=0; Person youngest;
    while(person == null){
      if(arr[i] instanceof Person) youngest = arr[i];
      i++;
      }
     for(i=0;i<arr.length;i++){ if (arr[i] instanceof Person) 
            if(arr[i].getDateOfBirth()<youngest.getDateOfBirth()) 
               youngest= arr[i];}
   return youngest;
}

理想情况下,Employee 应该是 Person 的子类,并且您将拥有一个 Person 数组。如果你想要Persons,你必须小心,因为instanceof所有子类也返回 true,这不是你的情况,因为 Employee 不扩展 Person,只是对未来的提醒。

于 2013-02-07T00:12:00.217 回答
1

在 Employee 和 Person 类中编写一些 get 方法。例如,

在您的 Employee 类中,创建:

public int getSalary(){
  return salary; // Make salary as a global variable
}

在您的 Person 类中,执行

public int getYear(){
  return year; // same here
}

所以在你的主要代码中,你可以做

for (int i = 1; i < array.length; i++){
  Object youngest;
  if (crr[i].getYear() < crr[i+1].getYear())){
    youngest = crr[i];
  }
}

但是,我实际上想建议您使用 ArrayList 而不是数组。并创建两个数组/ArrayLists,而不是将 e 和 p 放在一个数组中。更容易管理。

于 2013-02-07T00:51:14.797 回答
0

不要使用 Object 类型的数组。Java 擅长强类型,因此请充分利用这一点。如果 Person 扩展了 Employee,或者 Employee 扩展了 Person,则利用它。用顶级类初始化你的数组:

Person[] people = {new Employee(...), new Employee(...),
  new Person(...), new Person(...)};

或者

Person[] people;
...
people = new People[]{new Employee(...), 
  new Employee(...), new Person(...), new Person(...)};

或者

Person[] people = new People[<some number>];
...
people[0] = new Employee(...);
people[1] = new Person(...);
...

然后我们可以通过确保 Person(或 Employee)实现 Comparable(或 Employee)、实现 compareTo(Person other) {...}(或 Employee)并调用 Arrays.sort(people) 来对数组进行排序。因为我们使它们具有可比性,Java 将知道如何对它们进行排序。

Java 可以为您做很多事情,但您必须遵守它的规则。不使用“对象”容器是其中之一,实现 Comparable 接口是另一个(第三种是在 ArrayList、HashMap 等容器上使用泛型,以便 Java 知道您在其中放入了什么,而不是捕获-所有“对象”)

于 2013-02-07T00:12:16.827 回答
0

如果 Person 通过扩展与 Employee 不“相关”,您可以强制两个类实现相同的接口。创建该接口类型的数组并将 Employee 和 Person 对象放入其中。然后使用接口方法比较 Employee 和 Person 对象。我认为这里最好的选择是让 Employee 扩展 Person,但是接口可以提供一个不错的选择。

于 2013-02-07T00:26:39.200 回答