2016-10-29 11 views
-1

Я пытаюсь сделать метод, который принимает целое число k и массив целых чисел в качестве входных данных, а затем возвращает среднее из первых k элементов, а затем среднее из следующих k элементов и т. Д. Я делаю не знаю, почему мой код не работает.K running average Java

Кажется, что никто не задает мне вопрос. Вопрос заключается в том, чтобы найти среднее из k элементов за раз из входного массива, который является xs. А затем сформируйте другой массив со значениями averagek в нем (среднее из k элементов вычисляется).

static int[] averagek(int k, int[] xs) {   
    int[] average = new int[xs.length-k+1]; 
    for(int i = 0; i < xs.length-k+1; i++) {    
     int sum = 0;     
     for (int j = i; j<i+k-1; j++) {    
      sum = sum + xs[j]; 
     } 
     average[i] = (sum/k); 
    } 
    return average; 
} 
+1

Можете ли вы уточнить, что «не работает»? Вы получаете сообщение об ошибке? Неправильный результат? – Mureinik

+0

Что означает * «мой код не работает» * означает? Получаете ли вы ошибку или это отличается от ваших ожиданий, не порождая ошибок? – Gendarme

+1

Святой пробел. И, пожалуйста, полностью объясните, в чем проблема. – Carcigenicate

ответ

0

На первый взгляд, я вижу только один ясный проблема: что это:

 for (int j = i; j<i+k-1; j++) {    

должно быть так:

 for (int j = i; j < i + k; j++) { 

или это:

 for (int j = i; j <= i + k - 1; j++) { 

(Текущая версия, имеющая как строгое неравенство < и -1, пропустит последний элемент в группе, подлежащей усреднению.)

Но могут быть и другие проблемы. Я предлагаю отличное сообщение в блоге https://ericlippert.com/2014/03/05/how-to-debug-small-programs/, чтобы узнать, как отлаживать их.

Я также отмечу, что int может быть не подходящим типом данных для представления среднего числа целых чисел; например, целочисленно-арифметическое среднее значение 2 и 3 равно 2, поскольку в целых числах нет 2.5. Таким образом, вы можете переключиться на double[] и принудительно выполнить арифметику с плавающей запятой, написав average[i] = (sum * 1.0/k);. (До вас.)