0

オブジェクト型の配列を作成しています。名前、給与(従業員)の名、生年月日(人)などの単純な属性を持つ従業員と人という2つの異なるクラスがあります。いくつかの Employee オブジェクトと Person オブジェクトを配列に追加し、配列内の特定のものを比較する必要があります。例: 配列から最年少の 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 オブジェクトであるかどうかを確認し、それらのオブジェクトで getDateOfBirth を取得して最年長の人を印刷する必要があります。

4

4 に答える 4

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 を使用することをお勧めします。そして、e と p を 1 つの配列に入れる代わりに、2 つの配列/ArrayList を作成します。管理が容易になります。

于 2013-02-07T00:51:14.797 に答える
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 に答える
0

Person が拡張によって Employee に「関連」していない場合は、両方のクラスに同じインターフェイスを実装させることができます。そのインターフェイス タイプの配列を作成し、その中に Employee オブジェクトと Person オブジェクトを配置します。次に、インターフェイス メソッドを使用して、Employee オブジェクトと Person オブジェクトを比較します。ここでの最良の選択肢は Employee に Person を拡張させることだと思いますが、インターフェイスは優れた代替手段を提供できます。

于 2013-02-07T00:26:39.200 に答える
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 でできることはたくさんありますが、Java のルールに従う必要があります。「オブジェクト」コンテナーを使用しないこともその 1 つであり、Comparable インターフェースを実装することも別の方法です (3 つ目は、ArrayList、HashMap などのコンテナーでジェネリックを使用することです。これにより、キャッチではなく、コンテナーに何を入れているかを Java が認識できるようになります)。 -すべての「オブジェクト」)

于 2013-02-07T00:12:16.827 に答える