Array sortieren

Hallo,

ich habe einmal zu Testzwecken ein Programm geschrieben, dass die Punktzahl von Spielern sortieren soll bzw. die Spieler danach sortieren soll.

Java:
class Haupt{
	public static void main(String[] args){
		System.out.print("Bitte die Anzahl an Spieler eingeben: ");
		int anzahl_der_spieler = In.readInt();
		Spieler[] a = new Spieler[anzahl_der_spieler];
		for(int i = 0; i<anzahl_der_spieler; i++){
			System.out.print("Bitte die Punktezahl und die Anzahl der Siege eingeben: ");
			a[i] = new Spieler(In.readInt(), In.readInt());
		}
		Arrays.sort(a, new Vergleiche());
	}
}

Java:
class Spieler{
	int punkte;
	int siege;
	Spieler(int punkte, int siege){
		this.punkte = punkte;
		this.siege = siege;
	}
	int punkte(){
		return punkte;
	}
}

Java:
class Vergleich implements Comparator<Spieler>{
	public int compare(Spieler a, Spieler b){
		return a.punkte() - b.punkte();
	}
}

Die Klasse Spieler lässt sich laden.
Bei der Klasse Vergleich erscheint allerdings die Meldung:
Code:
Vergleich.java:1: cannot find symbol
symbol: class Comparator
class Vergleich implements Comparator<Spieler>{

Was mache ich denn falsch?
 
Dann fehlt dir in Vergleich noch in
Code:
import java.util.Comparator;
.
 
Die Frage ist ehrlich gesagt nicht viel besser 😉
Deine Klasse heißt Vergleich, du versuchst Vergleiche zu instantiieren.
 
Alternativ könntest du in Spieler auch das Interface Comparable implementieren. Wo
Code:
In.readInt();
herkommt, ist mir noch nicht ganz klar...
 
Noch eine Frage:
Gibt es eine Möglichkeit, in meiner Vergleichs-Klasse zusätzlich nach einem anderen Kriterium zu sortieren, oder muss ich dafür eine neue Klasse erstellen?
 
Du kannst sortieren wie du willst. Entscheidend ist dass du 0, negativ oder positiv zurückgibtst.
 
Was mir gerade auffällt ist, dass Zeile 4 in Vergleich nicht immer das gewünschte Ergebnis liefern muss, bedingt durch einen möglichen integer overflow

Um nach unterschiedlichen Kriterien zu sortieren, erstellst du am besten einen zusätzlichen Comparator

Oder du drehst das sortierte Array anschließend um, wenn es anstatt aufsteigend absteigend sortiert sein soll...

(Ein flag innerhalb von Vergleich ist eher unschön...)
 
Zuletzt bearbeitet von einem Moderator:
Ich schätze er meint das eher so:
1. Sortieren nach Punkten.
2. Wenn Punkte gleich, dann sortier nach Siegen.
Für sowas legt man dann keinen zweiten Comparator an.
 
Ich bin Student. Wenn ich richtig informiert bin, ist das eine Vereinfachung. Wir müssen in dem Ordner des Programmes dazu die in und Out Klasse haben.

Bin ich auch. Evtl. erscheint dir das kürzer oder besser handhabbar:

Java:
        Arrays.sort(array, new Comparator<Elem>() {

            public int compare(Elem o1, Elem o2) {
                return o1 < o2 ? -1 : o1 > o2 ? 1 : 0;
                // aufsteigend...
            }
        });

Das wäre eine s.g. anonyme innere Klasse - weil sie keinen Namen/Bezeichner hat und innerhalb einer Klasse/Methode steht...
 
Nein, ich möchte das Array noch einmal komplett anders sortieren. Dafür habe ich jetzt eine neue Klasse angelegt. Mich hat nur interessiert, ob dies ein schlechter Programmierstil wäre.
 
Ja wenn du ne komplett andere Sortierung haben willst dann erstellst du am besten ne neue Klasse.
 
Ich schätze er meint das eher so:
1. Sortieren nach Punkten.
2. Wenn Punkte gleich, dann sortier nach Siegen.
Für sowas legt man dann keinen zweiten Comparator an.

Achso! Dann muss einfach nur die implementierte Vergleichsmethode in Vergleich angepasst werden... (siehe unten...)

(Edit 2)
 
Zuletzt bearbeitet von einem Moderator:
Das war Quatsch... ungefähr so sollte das dann sein:

Java:
if (a.punkte() < b.punkte()) {
    return -1;
}
if (a.punkte() > b.punkte()) {
    return 1;
}
if (a.siege() < b.siege()) {
    return -1;
}
if (a.siege() > b.siege()) {
    return 1;
}
return 0;

Oder alles in der "verkürzenden" "? :"-Schreibweise...
 
Java:
a.punkte() - b.punkte();
Wenn a.punkte() eine sehr große Zahl, und b.punkte() eine sehr große negative Zahl ist kanns sein dass du den Wertebereich von nem Integer verlässt. Dann wird die eigentlich positive Zahl zu einer negativen.
 

Neue Themen


Zurück
Oben