Расчет средней температуры, когда есть много производителей температуры - PullRequest
0 голосов
/ 10 марта 2012
// AvgTemp.java
public abstract class  AvgTemp {
public void notifyReceived ( String  eventName, Object arg) {
if (eventName.equals("temperatureMeasurement"))  
             { 
                onNewtemperatureMeasurement((TempStruct) arg); 
             } 
}
public abstract void onNewtemperatureMeasurement(TempStruct tempStruct);
}  

// MyAvgTempImpl. java  

public class MyAvgTempImpl  extends AvgTemp {
@Override
public void onNewtemperatureMeasurement(TempStruct tempstruct) {

    //TODO : Need to write a code of  calculating Average Temperature.

    }
}

Мой вопрос `` как написать код расчета средней температуры (в MyAvgTempImpl. Java) в ситуации, когда уведомление поступает от многих датчиков (производителей данных о температуре)? ».

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Если эта информация от многих датчиков поступает из одного потока, вы просто суммируете их все и делите на количество полученных выборок.

С другой стороны, если эта информация от многих датчиков поступает из нескольких потоков, тогда вам придется использовать:

  • синхронизация потоков (используя блокировку для защиты суммы при добавлении);

или

  • атомарные операции (блокировка не требуется, поскольку результат всегда актуален и действителен);

или

  • составляют суммы для каждого потока, а затем составляют суммувсе суммы.

Я не программист на Java, поэтому я не могу сказать, как это делается в Java, но, по крайней мере, у вас есть общая идея.

0 голосов
/ 10 марта 2012

В вашем классе MyAvgTempImpl добавьте два поля: int count, double sum

В методе onNewtemperaMeasurement: do count ++ & sum + = sensedTemperaValue;

Добавьте еще один метод в ваш класс MyAvgTempImpl:

double getAverage() {
 return sum/count;
}
...