Я пишу код для своего класса AP Computer Science, и мне нужно найти дисперсию группы чисел. Для тех из вас, кто не знает, как найти дисперсию, это сумма квадратов различий значений из среднего значения, деленная на 1 меньше длины. Пример для этого более понятного. Если у вас были данные {1, 5, 8, 7, 2, 7}, тогда среднее значение было бы равно 6. Тогда вы могли бы быть [(1-6)^2 + (5-6)^2 + (8 -6)^2 + (7-6)^2 + (2-6)^2 + (7-6)^2]/5 = 8.4. Итак, вот этот метод.Код не находит правильную дисперсию
public static double variance(int[] data) {
int sum = 0;
double average;
for (int i=0; i < data.length; i++) {
sum = sum + data[i];
}
average = (double)sum/data.length;
for (int i=0; i < data.length; i++) {
data[i] = data[i] - (int)average^2;
}
int add = 0;
for (int d : data)
add += d;
add = add/data.length-1;
return add;
}
}
Я не разрешается изменять данные из Int массива, я понятия не имею, почему я получаю неправильный дисперсию, пожалуйста, помогите!
Что это такое 'add = add/data.length-1;'? Некоторое целочисленное деление? Это нужно? –
«все разделены на 1 меньше, чем длина» – user3053252
Вы должны использовать поплавки для точного деления; используя int, результат округляется до целого. В вашем примере ваш результат никогда не будет «8.4», но, скорее, «8», если вы использовали int – nbrooks