1
 public static double calcMedian(int[] array) {
    int n = array.length;
    int middle = n / 2;
    double median=0;
    for (int i = 0; i < n; i++) {
        if ((n % 2) == 1) {
            median = array[middle];
        } else if((n % 2) == 0){
            median = (array[middle-1] + array[middle]) / 2;
        }
    }
    return median;
}

When I have an odd numbers of element I don't get the right median. For instance, if my array is [1 3 6 7 10 12], the median should be 6.5. What I get is 6. I can't understand why. Thanks in advance

Mar3
  • 69
  • 7

2 Answers2

0

Because you are dividing an int by an int, the result is also of type int, and the decimal part of the result (.5) is truncated.

To get a double result, cast either the dividend or divisor to a double before the division operation, like so:

median = (array[middle-1] + array[middle]) / ((double) 2);

or

median = ((double) (array[middle-1] + array[middle])) / 2;
NthPortal
  • 372
  • 5
  • 7
0

You should change it to this (copy and paste ready, also tested and gives 6.5)

public static double calcMedian(int[] array) {
   int n = array.length;
   int middle = n / 2;
   double median=0;
   for (int i = 0; i < n; i++) {
       if ((n % 2) == 1) {
           median = array[middle];
       } else if((n % 2) == 0){
           median = ((double)(array[middle-1] + array[middle])) / 2;
       }
   }
   return median;
}
Gillsoft AB
  • 4,185
  • 2
  • 19
  • 35