[Java] Hjälp med egen compareTo
Hej
Håller på att försöka lösa en uppgift, men det går tungt.
Uppgiften är följande: Läs in de olika löparnas resultat, och skriv ut ett sorterad lista för varje tävling (det snabbaste resultatet först).
Indata :först ett tal som anger antalet löpare, följt av annat tal som anger antal tävlingar. Sedan följer varje löpares resultat: Först löparens förnamn, följt av ett heltal k som anger antalet resultat, följt av resultaten specificerade som k par av tal som i exemplet ovan. (varje indata är på en ny rad)
Utdata: Först ska tävlings nummer skrivas ut, följt av resultaten i tidsordning. Om flera personer har samma tid skriv de ut i alfabetisk ordning.
Jag försöker definiera en compareTo som utifrån dessa krav ska kunna sortera arrayen. Frågan är även hurvida en 2d array är det bästa sättet?
Känner mig bara helt vilse i pannkakan för tillfället, även om den kompilerar koden verkar min compareTo inte funka.
Hoppas någon har lust att ge lite tips, så det blir någon julfrid
import java.util.*;
import java.lang.*;
class Resultat implements Comparable<Resultat> {
String namn;
double tid;
public Resultat( String n, double t ) {
namn = n;
tid = t;
}
public String toString() {
return namn + ","+ tid;
}
public int compareTo( Resultat r ) {
if (this.tid < r.tid){
return -1;
}
else if (this.tid > r.tid){
return 1;
}
else if (this.tid == r.tid && this.namn.compareTo(r.namn) >= 0)
{
return -1;
}
else if ( this.tid == r.tid && this.namn.compareTo(r.namn) <= 0){
return 1;
}
else {return 0;}
}
}
public class jogging {
public static void main( String[] args ){
Scanner scan = new Scanner(System.in);
//antal löpare
int runners = scan.nextInt();
//if max 100
//antal tävlingar
int competitions = scan.nextInt();
//skapa array
Resultat [][] res = new Resultat[competitions][runners];
for (int i = 0; i < runners; i++){
String name = scan.next();
//antal tävlingar personen deltog i
int antalruns = scan.nextInt();
for(int n = 0; n <antalruns; n++){
//tävlingens nummer
int compnumber = scan.nextInt();
//tiden för tävlingen
double time = scan.nextDouble();
//lägg till objektet
res[compnumber][i] = new Resultat(name,time);
}
}
//test
Arrays.sort(res);
System.out.println(res[0][0]);
System.out.println(res[0][1]);
}
}