2014-10-27 7 views
0

Ниже приведен пример данных временных рядов:Вычислить среднее число в Java

time - 3 sec, value - 6 
time - 10 sec, value - 7 
time - 12 sec, value - 8 
time - 17 sec, value - 9 
time - 28 sec, value - 93 
time - 29 sec, value - 94 

Я хотел бы, чтобы вычислить среднее значение за последние 30 секунд. Есть ли простой стандартный алгоритм для этого? Было бы хорошо, чтобы увидеть ссылку на реализацию Java, а также

+4

Как вы храните данные? – FelixMarcus

+0

Это может быть карта например – user12384512

+0

Каков ваш ожидаемый результат для данного примера (т. Е. Какой именно средний показатель вы рассчитываете вычислить)? – NPE

ответ

1

Я написал (с другом) код, который вычисляет среднее число:

package dingen; 
import java.util.Scanner; 


public class Gemiddelde { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner sc = new Scanner(System.in); 

    float maxCount = 0; 
    float avgCount = 0; 

    System.out.println("How many numbers do you want"); 

    int n = sc.nextInt(); 

    for(int i = 0; i < n; i++) { 
     System.out.println("Number: "); 
     float number = sc.nextInt(); 
     maxCount = maxCount + number; 

    } 

    avgCount = maxCount/n; 
    System.out.println("maxCount = " + maxCount); 
    System.out.println("avgCount = " + avgCount); 
} 

} 

единственное, что вам нужно сделать, это заменить свой класс и пакет.

вы получите сообщение: How many numbers do you want?:

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

пример:

Сколько номеров вы хотите: 6

Количество: 6

Количество: 7

Количество: 8

Количество: 9

Номер: 93

Количество: 94

MAXCOUNT = 217,0

avgCount = 36,166668

Я надеялся, что я помог вам с вашей проблемой :)

+0

Это показывает, как вычислять среднее значение по номерам 'n', но ОП не просит об этом. Он спрашивает, как рассчитать среднее значение за последние 30 секунд. Обратите внимание, что через 30 секунд может быть больше, меньше или ровно 30 записей. –

0

Я хотел бы использовать TreeMap<Integer, Integer> с ключ - это секунды и значение, ну, ваше значение;)

TreeMap имеет полезные методы, такие как lastKey() и tailMap(), которые будут соответствовать вашему случаю использования:

TreeMap<Integer, Integer> map = new TreeMap<>(); 

// add all your entries 

Integer lastSecond = map.lastKey(); // returns the highest key 

Integer thirtySecondsAgo = lastSecond - 30; 

SortedMap<Integer, Integer> range = map.tailMap(thirtySecondsAgo); 

int count = 0; 
int sum = 0; 
for (Integer value : range.values()) { 
    sum += value; 
    count++; 
} 

double average = (double) sum/(double) count; 

tailMap() Документы

Возвращает представление части этой карты, ключи которого больше или равны к fromKey

для вашей проблемы, fromKey бы thirtySecondsAgo.