derzeit zwei Klassen Ich habe, Human
und Fysiker
, Human
nimmt zwei Argumente, eine age
und name
, während Fysiker
drei Argumente nimmt, age
, name
und startyear
.Möchten Sie eine Liste mit zwei Klassen sortieren Also mit
Bemerkenswert ist, dass ich Fysiker
mit Human
verlängert habe, mein Problem ist, dass ich die zwei von ihnen nach Alter sortiert werden sollen, die perfekt funktioniert, aber wenn zwei Fysiker
das gleiche Alter bekam, ich möchte, dass sie sortieren nach startyear
. Derzeit habe ich Collections.sort
dafür verwendet, und es funktioniert in gewissem Umfang. Das Problem ist, dass manchmal, sagen wir, ich 100 Objekte erstellt haben, 50 Human
und 50 Fysiker
ich einen Ausdruck wie folgt zu erreichen:
Saga, 30 Jahre 1972 (Fysiker) Tomas, 30 Jahre, 1974 (Fysiker) Nils, 30 Jahre (Human) Frida, 30 Jahre, 1969 (Fysiker, sortiert falsch, das sollte man zuerst sein)
Beachten Sie, dass dies mein Ausdruck war Collections.sort
verwendet wird, ist es eine Möglichkeit für ich, um den Ausdruck zu bekommen, wie es sein sollte, ich habe nichts dagegen, ein Mensch zwischendurch, aber ich möchte alle Fysiker
in der Ri sortiert werden Es scheint fast so, als ob Collections.sort
einfach zwei von ihnen betrachtet und diese sortiert und weitergeht. Meine zwei Klassen sucht derzeit wie folgt aus:
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;
}
}
Und:
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);}
}
Bitte lesen Sie [mcve] und erweitern Sie Ihre Frage entsprechend. – GhostCat
Ich war wie "Jon Skeet?" – mattias
Und nur für den Fall, dass Sie Ihren Spitznamen zu Ehren des großen Jon Skeet gewählt haben. News für Sie: Ihre Eingabe ist es nicht wert, diesen Namen zu verwenden. MEINER BESCHEIDENEN MEINUNG NACH. – GhostCat