Potrzebowałem metody, aby uzyskać medianę 3 wartości, myślałem, że to dobra okazja, aby napisać ogólną metodę, ponieważ tak naprawdę jej nie stosowałem. Napisałem to i wydaje mi się to całkiem proste, chociaż otrzymałem ostrzeżenie, ale wydaje mi się, że działa dobrze, zgodnie z moimi testami.Ogólna metoda znajdowania median 3 wartości
Jestem świadomy, że mógłbym użyć nieodłącznie posortowanego zestawu lub Collections.sort()
, ale to podejście jest ze względu na zrozumienie.
Chcę wskazać kilka rzeczy:
- zauważyłem to nie działa, gdy starałem się zadeklarować
medianHelper
zArrays.asList(a, b, c)
dlaczego to ma być? Próba przeszukiwania tego daje mi niepowiązane wyniki, a poza tym jest nieuchwytna, ponieważ nie jestem pewien, co się dzieje. DostajęUnsupportedOperationException
, ale to nie jest obecne tak, jak mam to poniżej. - Dlaczego otrzymuję ostrzeżenie? Co jest nie tak/brakuje?
Sposób następująco:
private static <T extends Comparable> T median(T a, T b, T c) {
List<T> medianHelper = new ArrayList<>();
T max;
T min;
medianHelper.add(a);
medianHelper.add(b);
medianHelper.add(c);
if (a.compareTo(b) >= 0) {
max = a;
min = b;
} else {
max = b;
min = a;
}
if (max.compareTo(c) == -1) {
max = c;
}
if (min.compareTo(c) >= 0) {
min = c;
}
medianHelper.remove(max);
medianHelper.remove(min);
return medianHelper.get(0);
}
Jakie ostrzeżenie otrzymujesz? – benzonico