Неправильный средний ответ - PullRequest
0 голосов
/ 18 сентября 2018

Проблема: у меня проблема с подсчетом медианного значения моего arrayList

Справочная информация: мой ArrayList получает случайно сгенерированные значения, и мне нужно вычислить его медиану; я верю, что моя средняя формула в порядке, но я получаю неправильные средние ответы для 3 значений в ArrayList.

для примерно трех значений, это дает неправильную медиану. НАПРИМЕР: когда список массивов имеет значения: 193,5, 200,5, 239,8 тогда программа просто берет среднее из первых двух значений и дает ответ вместо 200,5

public double getMedianB(){
    Collections.sort(myDataB);
    double middle = myDataB.size()/2;
    if (myDataB.size()%2 == 1) {
       middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 - 1))/2;
    } else {
        middle = myDataB.get(myDataB.size() / 2);
    }
    System.out.println("median:" + middle);
  return middle;
}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Медиана рассчитывается как

  1. Упорядочить список в порядке возрастания
  2. Если число элементов в списке нечетное, то среднее число является медианой
  3. Есликоличество элементов четное, затем сложите средние два числа и разделите их на два, результатом будет медиана

В вашем коде есть условия для переключения четных и нечетных, поэтому правильным будеткак показано ниже

if (myDataB.size()%2 == 0) {
   middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 + 1))/2;
} else {
    middle = myDataB.get(myDataB.size() / 2);
}
0 голосов
/ 18 сентября 2018

Чтобы получить среднее значение, вам просто нужно получить среднее значение. скорее в вашем примере вы вычисляете некоторое среднее из первых двух значений.

Изменить код на:

Collections.sort(myDataB);
        double middle = myDataB.size()/2;
        if (myDataB.size()%2 == 1) {
           middle = (double)myDataB.get(myDataB.size()/2);
        } else {
            middle = (double) myDataB.get(myDataB.size() / 2);
        }
        System.out.println("median:" + middle);

Измените другое условие, все, что вы хотите там выполнить.

0 голосов
/ 18 сентября 2018

Вы должны изменить свои условия:

Приведенное ниже условие проверяет, является ли число слагаемых нечетным. В этом случае вам просто нужно одно среднее значение.

if (myDataB.size()%2 == 1) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...