Ich kenne Standardvergleiche mit der Vergleichsschnittstelle, obwohl ich heute Schwierigkeiten habe, wenn ich mehrere verschiedene Variablen vergleichen möchte.Vergleichbar verwenden, um verschiedene Variablen zu vergleichen
Ich mag im Grunde eine compareTo Methode implementieren, die das Ergebnis -1 nur, wenn die folgenden if-Anweisung wahr ergibt:
if (o.maxX > minX && o.maxY > minY && o.minZ < maxZ)
Obwohl, ich bin nicht sicher, ob dies möglich ist, mit einem vergleichbar oder mir ist es nicht so vertraut, wie es scheint. Denn wenn ich versuche, den Ansatz
public int compareTo(IsoSprite o) {
if (o.maxX > minX && o.maxY > minY && o.minZ < maxZ){
return -1;
}else if(o.maxX < minX && o.maxY < minY && o.minZ > maxZ){
return 1;
}
return 0;
}
ich die Fehlermeldung „Vergleichsmethode seines allgemeinen Vertrag verletzt!“. Ich möchte klarstellen, dass ich keine Hilfe brauche, um zu verstehen, was dieser Fehler bedeutet, weil ich mehrere Fragen dazu gelesen habe. Obwohl ich mich immer noch nicht mit diesem speziellen Problem befassen kann, weil die Lösungen zu den anderen Fragen, die ich gelesen habe, trivial waren.
Ich würde wirklich einige Hilfe mit diesem Vergleich schätzen, es wäre ein Lebensretter. Jede Eingabe wird ebenfalls sehr geschätzt.
Edit: Nach der Prüfung um, ich habe etwas bekam, die fast funktioniert (nicht in allen Fällen), aber ich kann nicht herausfinden, warum:
public int compareTo(IsoSprite o) {
if (o.maxX > minX && o.maxY > minY && o.minZ < maxZ) {
return -1;
} else if (o.maxX > minX && o.maxY > minY && o.minZ > maxZ) {
return 1;
}else if (o.maxX < minX && o.maxY > minY && o.minZ > maxZ) {
return 1;
}else if (o.maxX < minX && o.maxY < minY && o.minZ > maxZ) {
return 1;
}else if (o.maxX < minX && o.maxY > minY && o.minZ < maxZ) {
return 1;
}else if (o.maxX > minX && o.maxY < minY && o.minZ > maxZ) {
return 1;
}else if (o.maxX < minX && o.maxY < minY && o.minZ > maxZ) {
return 1;
}else if (o.maxX > minX && o.maxY < minY && o.minZ < maxZ) {
return 1;
}else if (o.maxX < minX && o.maxY > minY && o.minZ < maxZ) {
return 1;
}else if(this != o){
return 1;
}
return 0;
}
http://stackoverflow.com/questions/8327514/comparison-method-violates-its-general-contract die oberste Antwort könnte nützlich sein – twentylemon
Sie wissen, dass Ihr Code gegen den allgemeinen Vertrag von Comparable verstößt (möglicherweise durch einen Fehler bei der Transitivitätsregel). , dann kann es nicht zum Sortieren verwendet werden. Zeitraum. Ihre Frage kann ein [XY-Problem] (http://mywiki.wooled.org/XyProblem) sein, in dem Sie fragen, wie Sie ein bestimmtes Codeproblem lösen können, wenn die beste Lösung darin besteht, einen völlig anderen Ansatz zu verwenden. Besser, dass Sie uns das Gesamtproblem mitteilen, das Sie lösen möchten, und nicht, wie Sie es gerade lösen wollen. –
@HovercraftFullOfEels Es ist nicht nur dieses spezielle Problem, ich habe auch schon einmal Probleme wie diese gehabt, irgendwie scheint es, als könnten sie mit einem vergleichbaren irgendwie gelöst werden – Deminth