所以目前我有兩個班,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);}
}
請閱讀[mcve]並相應地提高您的問題。 – GhostCat
我喜歡「Jon Skeet?」 – mattias
而且萬一你選擇了你的暱稱來紀念偉大的Jon Skeet。新聞給你:你的意見不值得使用這個名字。恕我直言。 – GhostCat