我目前正在使用两个不同的类,一个名为Human
,另一个名为Fysiker
。 Human有两个不同的类属性, age 和 name ,而Fysiker有三个: age , name 和 startyear 。我的代码继承了Human类到Fysiker类的属性。
目标是为了确保如果我有两个Fysiker类的对象具有相同的年龄,那么我想在 startyear之后对它们进行排序
问题是我想使用我已实现的Collections.sort
对代码进行排序。这个问题有点棘手,但我创建了一个ArrayList
,它接受了参数Human
。必须这样做,因为在某些时候我想用Human
和Fysiker
来填充该列表。
然后我实施了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));
}
}
}