2014-10-09 2 views
0

Итак, у меня есть метод, который циклический и возвращающийся эти номера автоматически:Усреднение нескольких результатов метода?

6527.6 6755.6 7009.9 7384.7 7775.9 8170.7 8382.6 8598.8 8867.6 9208.2 9531.8 9821.7 10041.6 10007.2 9847.0 10036.3 10263.5 10449.7 10699.7 

Я хотел бы усреднить первое число ко второму номеру, вторым к третьему номеру, и так далее. Какими способами я должен заниматься этим? Добавление всех этих удвоений в массив? Или есть способ получить общее количество, чтобы сделать это?

Проблема, с которой я сталкиваюсь, заключается в том, что я могу только представить, что все или ни одного из этих двухместных, а не конкретных.

Таким образом, результат будет результатом чего-то вроде (6527.6 + 6755.6)/2, (6755.6 + 7009.9)/2 и т. Д. Просто распечатайте их, ничего больше.

Edit: Код с парсером здесь: http://pastebin.com/V6yvntcP

+0

Что именно вы подразумеваете под «средним первым числом ко второму номеру» и т. Д.? Где вы получаете номера из (расчет/структура данных)? – LionC

+3

Покажите нам код, который вы пробовали. –

+0

Также создайте новый текстовый абзац, в котором вы точно укажете, каков должен быть требуемый вывод. –

ответ

1

То, что вы описываете, называется скользящей средней. Некоторые формальные объяснения здесь:

http://en.wikipedia.org/wiki/Moving_average

[...] простая скользящая средняя (SMA) является невзвешенное среднее из предыдущих п данных [...]

Вы хотите вычислить скользящее среднее значение для n = 2.

Ниже простой код, который это сделать:

public static void main(String[] args) { 
    List<Double> list = Arrays.asList(6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7); 

    for (int i = 1; i < list.size(); i++) { 
     double avg = (list.get(i) + list.get(i - 1))/2; 
     System.out.println("avg(" + (i - 1) + "," + i + ") = " + avg); 
    } 
} 

И второй подход без списка или массива:

Double prev = null; 

// inside loop: 

double curr = getMethodResult(...); 

if (prev != null) { 
    double avg = (curr + prev)/2; 
} 

prev = curr; 

// end of loop 
+0

Проблема со вторым решением заключается в том, что метод, из которого я получаю данные, непрерывно выплескивает числа, поэтому сначала он выплескивает 6527,6, затем следующий, а затем следующий. Это похоже на замену переменной снова и снова. Я обновляю свой основной пост с помощью кода метода парсера, который выплевывает номера – nextDouble

0

Создание и массив двойных и просто сделать некоторые перемещения и замены и его сделали. Проверьте это:

double[] array = { 6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7 }; 
     double avg = 0; 
     double sum = 0.0; 
     double temp = 6527.6; 
     for (int i = 0; i < array.length - 1; i++) { 
      sum = temp + array[i + 1]; 
      avg = sum/2; 
      System.out.println("(" + temp + "+" + array[i + 1] + ")/2" + "= " 
        + avg); 
      temp = avg; 

     } 
Смежные вопросы