当一个班级不了解另一个班级时使用instanceof

时间:2017-11-09 07:32:43

标签: java class

我目前正在使用两个不同的类,一个名为Human,另一个名为Fysiker。 Human有两个不同的类属性, age name ,而Fysiker有三个: age name startyear 。我的代码继承了Human类到Fysiker类的属性。

目标是为了确保如果我有两个Fysiker类的对象具有相同的年龄,那么我想在 startyear之后对它们进行排序

问题是我想使用我已实现的Collections.sort对代码进行排序。这个问题有点棘手,但我创建了一个ArrayList,它接受​​了参数Human。必须这样做,因为在某些时候我想用HumanFysiker来填充该列表。

然后我实施了CompareTo,一个用于Fysiker,另一个用于Human。当我仅使用类Fysiker的对象填充我的列表时,它仍然不会在 startyear 之后对它们进行排序,而是仅在 age 之后。这基本上让我觉得,因为ArrayList只需要Human,所以'使用我的CompareTo代替Human类而不是Fysiker类。我已经得到了线索(来自作业)以使用instanceOf,但我不知道如何使用它,因为我的Human类对Fysiker一无所知,只是相反。

我已经发布了另一个问题,接近这一个问题,但我想我已经开始了解问题在这个阶段是什么,至少更接近。我的代码看起来像这样:

import java.util.List;
import java.util.Arrays;
import java.util.Random;
import java.util.ArrayList;
public class Human implements Comparable<Human>{
        public static final List<String> names = Arrays.asList("Rutger","Oscar","Aram","Noak","Hilda","Dahl");
        public Random rand=new Random();
        public String name;
        public int age;

    public Human(int age, String name){
        this.age=age;
        this.name=name;

    }
    public Human(){
        this.age=rand.nextInt(101);
        this.name=names.get(rand.nextInt(names.size()));
    }

    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
    public String toString(){
        return "åldern är:"+this.age+" "+"namnet är:"+this.name;
    }
    public int compareTo(Human o){
        return this.age-o.age;
}

}

Fysiker类:

import java.util.List;
import java.util.Arrays;
import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
public class Fysiker extends Human{

    public int startyear;
    public Fysiker(int age, String name, int startyear){
        this.age=age;
        this.name=name;
        this.startyear=startyear;
    }

    public int getYear(){
        return startyear;
    }


    public int compareTo(Fysiker o){
        int b;
        b=(this.age>o.age ? 1:this.age<o.age ? -1:0);
        if (b==0){
            b=(this.startyear>o.startyear ? 1:this.startyear<o.startyear ? -1:0);
            return b;}
            else{
            return b;}

    }

    public String toString(){
        return "åldern är:"+this.age+" "+"namnet är:"+this.name+" "+"började fysik:"+String.format("F%02d",this.startyear%100);
    }

    public Fysiker(){
        this.age=15+rand.nextInt(86);
        this.name=names.get(rand.nextInt(names.size()));
        this.startyear=2015-rand.nextInt(this.age-14);
        while (this.startyear<1932){
            this.startyear=2015-rand.nextInt(this.age-14);
    }
}
    public static void main(String[] args){
        ArrayList<Human> fysiker=new ArrayList<Human>();
        int q;



        for (q=0;q<=80;q++){
            fysiker.add(new Fysiker());
        }
        int s;
        Collections.sort(fysiker);
        for (s=0;s<=fysiker.size()-1;s++){
            //fysiker.get(0).compareTo(fysiker.get(s));
            System.out.println(fysiker.get(s).toString());
            //System.out.println(fysiker.get(0));
        }
    }

}

0 个答案:

没有答案