Statistiktabelle

Lez

Neues Mitglied
Hallo ich wollte fragen ob mir jemand erklören kann wie man eine Tabelle erstellt in welcher Int,String,Float und boolean mit einander verglichen werden.
Zuerst sollen die Int Werte, zwischen 2 Objekten vergichen werden wenn diese gleich sind, die floatwerte, falls diese ebenfalls gleich sind die boolean Werte und falls diese ebenfalls gleich ist der String Wert.
Es geht hierbei um das sortieren von Gladiatoren der betse Gladiator steht oben der schlechteste unten
Ich verstehe nicht wie ich die Floats,Strings und booleans implementiren soll.

public void sortGlad() {
GladStat[] gl = {
new GladStat(name, anzKämpfe, siege, niederl, siegquote, lebendig),
new GladStat(name, anzKämpfe, siege, niederl, siegquote, lebendig)
};

// 1. sort using Comparable
Arrays.sort(gl);
System.out.println(Arrays.asList(gl));

// 2. sort using comparator: sort by id
Arrays.sort(gl, new Comparator<GladStat>() {
@Override
public int compare(GladStat gl1, GladStat gl2) {
//return gl1.siege.compareTo(gl2.siege);
return Integer.compare(gl1.siege, gl2.siege);
}
});
System.out.println(Arrays.asList(gl));
}
 

mihe7

Top Contributor
Zuerst sollen die Int Werte, zwischen 2 Objekten vergichen werden wenn diese gleich sind, die floatwerte, falls diese ebenfalls gleich sind die boolean Werte und falls diese ebenfalls gleich ist der String Wert.
Ja, damit hast Du den Algorithmus ja schon angegeben :)

Ich verstehe nicht wie ich die Floats,Strings und booleans implementiren soll.
Skizze:
Java:
int result = gl1.siege - gl2.siege;
if (result != 0) {
    return result;
}

result = gl1.siegquote - gl2.sieqquote; // Achtung: Fließkommazahlenvergleiche...
if (result != 0) {
    return result;
}

return gl1.name.compareTo(gl2.name);

Be Fließkommazahlen heißt es beim Vergleichen aufpassen, wenn diese Ergebnisse unterschiedlicher Berechnungen sind. Dort verwendet man meist ein Epsilon, um die Gleichheit festzustellen.

Bei booleans musst Du halt festlegen, ob z. B. true > false gelten soll. Die Wrapper-Klassen implementieren das Comparable-Interface, so dass Du auch per Wrapper vergleichen könntest:
Java:
Boolean.valueOf(gl1.lebendig).compareTo(Boolean.valueOf(gl2.lebendig));
Oder eben ohne Wrapper einfach selber machen:
Java:
result = gl1.lebendig == gl2.lebendig ? 0 : (gl1.lebendig ? 1 : -1);
 

mrBrown

Super-Moderator
Mitarbeiter
Be Fließkommazahlen heißt es beim Vergleichen aufpassen, wenn diese Ergebnisse unterschiedlicher Berechnungen sind. Dort verwendet man meist ein Epsilon, um die Gleichheit festzustellen.

Bei booleans musst Du halt festlegen, ob z. B. true > false gelten soll. Die Wrapper-Klassen implementieren das Comparable-Interface, so dass Du auch per Wrapper vergleichen könntest:
Die Wrapper bieten auch alle eine compare-Methode, zumindest für boolean und ganze Zahlen sind die uneingeschränkt nutzbar, für Fließkommazahlen halt nur, wenn kein Epsilon benötigt wird.

Wenn man da mit Epsilon rechnet, steigen manche Sortier-Algorithmen afaik aus, da dann nicht mehr aus a==b und b==c auch a==c folgt - damit muss man also vorsichtig sein.


(Und irgendwann empfiehlt sich dann natürlich auch die Nutzung der Methoden aus Comparator, macht das ganze deutlich lesbarer.)
 

Neue Themen


Oben