Jestem zaznajomiony ze standardowymi porównaniami przy użyciu interfejsu Porównywalne, chociaż dziś mam problemy, gdy chcę porównać kilka różnych zmiennych.Używanie porównywalnego do porównywania różnych zmiennych
Zasadniczo chcę zaimplementować metodę compareTo który daje wynik tylko -1 gdy następujący jeśli stwierdzenie jest prawdziwe:
if (o.maxX > minX && o.maxY > minY && o.minZ < maxZ)
Chociaż nie jestem pewien, czy jest to możliwe za pomocą porównywalne lub po prostu nie jest mi tak dobrze, jak się wydaje. Ponieważ przy próbie podejścia
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;
}
Otrzymuję błąd „metoda Porównanie narusza jego ogólną umowę!”. Chcę wyjaśnić, że nie potrzebuję pomocy w zrozumieniu, co ten błąd oznacza, ponieważ przeczytałem kilka pytań na ten temat. Chociaż nadal nie mogę się skupić na tym konkretnym problemie, ponieważ rozwiązania innych pytań, które przeczytałem, były banalne.
Byłbym wdzięczny za pomoc przy porównaniu, byłoby to ratunkiem życia. Dowolne wejście jest również doceniane.
Edycja: Po przetestowaniu wokół, mam coś, co prawie działa (nie we wszystkich przypadkach), ale nie mogę zrozumieć, dlaczego:
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 Najlepsza odpowiedź może być przydatna – twentylemon
Wiesz, że Twój kod narusza ogólne zamówienie porównywalne (możliwe, że nie działa reguła przechodniości) , wtedy nie można go użyć do sortowania. Kropka. Twoje pytanie może być [XY Problem] (http://mywiki.wooledge.org/XyProblem), gdzie pytasz, jak rozwiązać konkretny problem z kodem, gdy najlepszym rozwiązaniem jest użycie zupełnie innego podejścia. Lepiej, abyś powiedział nam ogólny problem, który próbujesz rozwiązać, a nie jak obecnie próbujesz go rozwiązać. –
@HovercraftFullOfEels To nie tylko ten konkretny problem, wcześniej też miałem podobne problemy, wydaje mi się, że można je rozwiązać za pomocą porównywalnego w jakiś sposób – Deminth