要排序使用
所以目前我有两个班,Human
和Fysiker
,Human
取两个参数,一个age
和name
两个类的列表,而Fysiker
正在采取三个参数,age
,name
和startyear
。要排序使用
值得注意的是,我已经扩展Fysiker
与Human
,我的问题是,我想年龄后他们两个,这是可以正常使用排序,但如果两个Fysiker
得到了相同的年龄,我要对它们进行排序之后startyear
。目前我已经使用了Collections.sort
,并且它在某种程度上起作用。问题是,有时,让我们说我创建100个对象,50 Human
和50 Fysiker
,我能得到这样的打印输出:
传奇,30年来,1972年(Fysiker)托马斯,30年来,1974年(Fysiker)尼尔斯, 30年(人)弗里达30年代,1969年(Fysiker,整理错了,这 一个应该是第一个)
请注意,这是使用Collections.sort
我的打印输出,是有办法我得到打印输出,因为它应该是,我不介意一个人之间,但我希望所有的Fysiker
排序在里ght的方式,它几乎看起来像Collections.sort
只是看着他们中的两个,并排序这些并继续前进。我的两个班目前正在寻找这样的:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Collections;
public class Human implements Comparable<Human>{
static Random rand=new Random();
public int age;
public String name;
public static List<String> names=Arrays.asList("hugo","tor","tomas");
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(3));
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String toString() {
return "\n namnet är:"+" "+this.name+" "+"åldern är:"+" "+this.age;
}
public int compareTo(Human o) {
return this.age - o.age;
}
}
和:
import java.util.concurrent.ThreadLocalRandom;
public class Fysiker extends Human {
int startyear;
public Fysiker(int age,String name,int startyear) {
if (startyear>=1932 && startyear<=2015){
this.startyear=startyear;
this.age=age;
this.name=name;}
else{
System.out.println("nej");
}
if (age>=15 && age<=100){
this.age=age;
this.name=name;
this.startyear=startyear;}
else{
System.out.println("nej");}
}
public Fysiker() {
this.startyear = 1932 + rand.nextInt(84);
this.age = ThreadLocalRandom.current().nextInt(2015-this.startyear+15, 101);
this.name = names.get(rand.nextInt(3));
}
public String getYear() {
return String.format("F %02d", this.startyear % 100);
}
public String toString() {
return super.toString() + " " + "startåret är:" + " " + String.format("F %02d", this.startyear % 100);
}
public int compareTo(Human o) {
if(this.age==o.age && this instanceof Fysiker && o instanceof Fysiker) {
return this.startyear-((Fysiker)o).startyear;}
return super.compareTo(o);}
}
变化if
条件从:
if(this.age == o.age && this instanceof Fysiker && o instanceof Fysiker)
到
if(this.age == o.age && o instanceof Fysiker)
这是为什么变化nece ssary?
假设两个对象具有相同的年龄,然后要检查是否o
是Fysiker
类型,目前作为你编写代码将总是评估为真正无论o
是Fysiker
类型或不是,因此阻止了o instanceof Fysiker
的评估。
的if
块中的代码应该如果两个对象具有相同的年龄仅执行和o
是Fysiker
型的,但是这不是你的代码是由于&& this instanceof Fysiker
做。
非常感谢你的帮助,最后它似乎在工作! –
请阅读[mcve]并相应地提高您的问题。 – GhostCat
我喜欢“Jon Skeet?” – mattias
而且万一你选择了你的昵称来纪念伟大的Jon Skeet。新闻给你:你的意见不值得使用这个名字。恕我直言。 – GhostCat