Вчера я столкнулся с такой же проблемой, и я написал решение, подобное типу sifho. Мой метод --- реализованный с использованием Java generics --- вычисляет среднее значение для каждой коллекции чисел. Вы можете использовать метод с наборами Doubles, Integer, Floats и возвращает double. Учтите, что мой метод создает другую коллекцию, чтобы не изменять исходную. Я также предоставляю тест, получаю удовольствие. ;-)
public static <T extends Number & Comparable<T>> double median(Collection<T> numbers){
if(numbers.isEmpty()){
throw new IllegalArgumentException("Cannot compute median on empty array of numbers");
}
List<T> numbersList = new ArrayList<>(numbers);
Collections.sort(numbersList);
int middle = numbersList.size()/2;
if(numbersList.size() % 2 == 0){
return 0.5 * (numbersList.get(middle).doubleValue() + numbersList.get(middle-1).doubleValue());
} else {
return numbersList.get(middle).doubleValue();
}
}
JUnit тест фрагмент кода:
/**
* Test of median method, of class Utils.
*/
@Test
public void testMedian() {
System.out.println("median");
Double expResult = 3.0;
Double result = Utils.median(Arrays.asList(3.0,2.0,1.0,9.0,13.0));
assertEquals(expResult, result);
expResult = 3.5;
result = Utils.median(Arrays.asList(3.0,2.0,1.0,9.0,4.0,13.0));
assertEquals(expResult, result);
}
Пример использования (рассмотрим имя класса Utils):
List<Integer> intValues = ... //omitted init
Set<Float> floatValues = ... //omitted init
.....
double intListMedian = Utils.median(intValues);
double floatSetMedian = Utils.median(floatValues);
Что такое ваш вклад? –
Каков размер переменной 'liczby' в ваших тестах? Какой метод 'get (n)' делает? –
- размер номеров (liczby), определенных пользовательским приложением. проблема будет в методе get (n) – elle