я должен создать массив и вызов метода для среднего. но по какой-то причине это не среднее число всех чисел, а только возвращающее последнее число. Я попросил моего инструктора о помощи, и она сказала, что математика правильная, и она должна работать. Но никакой другой помощи от нее. Что я сделал не так?
public static void main(String[] args) {
double[] myArray = new double[2];
initialize(myArray);
double avg = getAverage(myArray);
System.out.println(avg);
output(avg);
}
public static void initialize(double[] myArray) {
//myArray = new double[1000];
for(int i = 0; i < myArray.length; i++) {
myArray[i] = (int) ((Math.random()*500)*1);
System.out.println(myArray[i]);
}
}
/**
*
* @param myArray
* @return
*/
public static double getAverage(double[] myArray) {
int sum = 0;
for (int i = 0; i < myArray.length; i++) {
sum += myArray[i];
}
return sum / myArray.length;
}
public static void output(double avg) {
System.out.println("The average is " + avg);
}
Ключ находится в этой строке:
sum / myArray.length
... так как и sum
и myArray.length
являются целыми числами, Java выполняет целочисленное деление, а не деление с плавающей запятой, что по сути означает, что он уменьшает десятичный компонент результата.
Выделение одного из значений в double
сначала приведет к возникновению деления с плавающей запятой.
Вы также сохраняете сумму как int, которая может снова ввести источник ошибки, поскольку массив содержит парные. В этом случае вы в порядке, потому что вы бросаете все, что вы помещаете в массив, сначала на int, и возникает вопрос о том, почему вы используете двойной массив в первую очередь?
В стороне это немного странно:
((Math.random()*500)*1);
Нет необходимости умножать результат на 1 здесь - это ничего не сделает.
В чем проблема? Ответы идут правильно. Пожалуйста, проверьте еще раз. Интересным фактом является то, что третье число всегда такое же, как среднее из всех трех. Но среднее вычисление является правильным. Возможно, Math.random() генерирует случайные числа внутри. Третье - среднее значение двух других. Попробуйте четыре или пять чисел вместо трех цифр и проверьте свои ответы.