Avevo bisogno di un metodo per ottenere la mediana di 3 valori, ho pensato che fosse una buona occasione per scrivere un metodo generico in quanto non ho davvero praticato. Ho scritto questo e sembra piuttosto semplice, anche se ricevo un avvertimento, ma sembra funzionare bene, secondo i miei test.Metodo generico per trovare la mediana di 3 valori
Sono consapevole che potrei utilizzare un set ordinatamente ordinato, o Collections.sort()
, ma questo approccio è per motivi di comprensione.
voglio individuare un paio di cose:
- Ho notato che questo non funziona se ho cercato di dichiarare
medianHelper
conArrays.asList(a, b, c)
perché è questo? Cercando di cercare questo mi dà risultati non correlati ed è altrimenti inafferrabile dal momento che non sono sicuro di ciò che sta accadendo. Ottengo unUnsupportedOperationException
, ma questo non è presente nel modo in cui lo ho qui sotto. - Perché ricevo un avviso? Cosa c'è di sbagliato/mancante?
Il metodo segue:
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);
}
Che avviso ricevi? – benzonico