Hallo!
Also erstmal vorweg, ich les schon ne Zeit heir im Forum und es hat mir echt weiter geholfen!
Da ich derzeit für die Uni mit Java programmieren muss (Hausübungen und so...), bin ich gerade auf ein Problem gestossen...
Noch schlimmer - die HÜ muss ich morgen abgeben u is kriegs einfach nicht so ganz hin...
und zwar soll dabei eine ArrayList mit x Läufern erstellt werden, die jeweils (gleich viele) aber halt endlich viele Runden absolvieren (Rundenzeiten dann wieder in einer ArrayList)
Aus den eingegebenen Rundezeiten wird eine DurchschnittsGeschwindigkeit für jeden Läufer (Klasse "Lauf") ermittelt
Die Ausgabe soll anschließend alle Läufer (Instanzen der Klasse "Lauf") sortiert (mit comparable! nicht comperator) nach der DurchschnittsGeschw ausgeben können (beginnend mit der höchsten)
Hier dann mal der (relevante) Code dazu:
Die Klasse "Lauf"
und die main()
Das Problem ist jetzt einfach, das die Ausgabe weder bei menue == 1 noch bei menue == 2 irgendwie sorteirt wird.
Ich hab jetzt bereits Google, sowie einige Bücher zu dem Thema befragt und über das comparable interface nachgelesen, komm aber leider nicht dahinter warum es nicht funktioniert...
Bitte um Hilfe!
(Das Problem muss nicht unbedingt komplett gelöst werden, aber zumindest ein Hinweis wo der Fehler liegen könnte wäre super)
lg
vienna_devil
Also erstmal vorweg, ich les schon ne Zeit heir im Forum und es hat mir echt weiter geholfen!
Da ich derzeit für die Uni mit Java programmieren muss (Hausübungen und so...), bin ich gerade auf ein Problem gestossen...
Noch schlimmer - die HÜ muss ich morgen abgeben u is kriegs einfach nicht so ganz hin...
und zwar soll dabei eine ArrayList mit x Läufern erstellt werden, die jeweils (gleich viele) aber halt endlich viele Runden absolvieren (Rundenzeiten dann wieder in einer ArrayList)
Aus den eingegebenen Rundezeiten wird eine DurchschnittsGeschwindigkeit für jeden Läufer (Klasse "Lauf") ermittelt
Die Ausgabe soll anschließend alle Läufer (Instanzen der Klasse "Lauf") sortiert (mit comparable! nicht comperator) nach der DurchschnittsGeschw ausgeben können (beginnend mit der höchsten)
Hier dann mal der (relevante) Code dazu:
Die Klasse "Lauf"
Java:
class Lauf implements Comparable<Lauf>{
String name;
String datum;
double streckenlaenge;
double durchschnittsGeschw;
ArrayList<Integer> rundenZeitenList = new ArrayList<Integer>();
Lauf(String nameInp, String datumInp, double strecke)
{
name = nameInp;
datum = datumInp;
streckenlaenge = strecke;
}
public void AddRunde()
{
System.out.print("Rundenzeit in Sekunden: ");
Scanner sc = new Scanner(System.in);
int time = sc.nextInt();
rundenZeitenList.add(time);
}
...
public void GetDurchschnittsGeschw()
{
double gesamtZeit = GetGesamtZeit();
double strecke = GetGesamtstrecke();
durchschnittsGeschw = (gesamtZeit / strecke);
}
public int compareTo( Lauf argument ) {
if( durchschnittsGeschw < argument.durchschnittsGeschw )
return 1;
if( durchschnittsGeschw > argument.durchschnittsGeschw )
return -1;
return 0;
}
}
und die main()
Java:
public static void main(String[] args) {
...
//Einlesen der Runden-Anzahl als integer
Scanner sc = new Scanner(System.in);
int anzahlLaeufer = sc.nextInt();
ArrayList<Lauf> laeufeList = new ArrayList<Lauf>();
...
int anzahlRunden = sc.nextInt();
//for-Schleife wird anzahlRunden oft durchlaufen,
for(int i = 0; i< anzahlLaeufer; i++)
{
...
laeufeList.add(new Lauf(name, date, laenge));
for(int j = 0; j < anzahlRunden; j++)
{
Lauf aktuellerLauf = laeufeList.get(i);
aktuellerLauf.AddRunde();
}
}
//Ausgabe:
System.out.print("Wollen sie jetzt alle Läufer ausgeben? (yes = 1, sorted = 2, no = 0) ");
int menue = sc.nextInt();
if(menue == 1)
{
System.out.println("\n");
for(int i = 0; i < laeufeList.size(); i++)
{
laeufeList.get(i).GetDurchschnittsGeschw();
System.out.println("Name: " + (laeufeList.get(i).name) + "\t" + "Durchschnittsgeschwindigkeit: " + laeufeList.get(i).durchschnittsGeschw + " m/sek");
}
}
else if (menue == 2)
{
Collections.sort(laeufeList);
System.out.println("\n");
for(int i = 0; i < laeufeList.size(); i++)
{
laeufeList.get(i).GetDurchschnittsGeschw();
System.out.println("Name: " + (laeufeList.get(i).name) + "\t" + "Durchschnittsgeschwindigkeit: " + laeufeList.get(i).durchschnittsGeschw + " m/sek");
}
}
}
Das Problem ist jetzt einfach, das die Ausgabe weder bei menue == 1 noch bei menue == 2 irgendwie sorteirt wird.
Ich hab jetzt bereits Google, sowie einige Bücher zu dem Thema befragt und über das comparable interface nachgelesen, komm aber leider nicht dahinter warum es nicht funktioniert...
Bitte um Hilfe!
(Das Problem muss nicht unbedingt komplett gelöst werden, aber zumindest ein Hinweis wo der Fehler liegen könnte wäre super)
lg
vienna_devil