2015-04-19 3 views
0

У меня есть код, в котором значение генерируется через каждую секунду в зависимости от скорости пользователя. Теперь я хочу, чтобы пользовательские средние значения всех генерируемых значений скорости. Я хочу отобразить его в текстовом виде.Вычисление среднего значения Variable, android

Как я могу это сделать, любая помощь?

Вот мой код:

LocationManager lm = (LocationManager) this 
      .getSystemService(Context.LOCATION_SERVICE); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

    this.onLocationChanged(null); 

} 

@Override 
public void onLocationChanged(Location location) { 
    TextView tv = (TextView) findViewById(R.id.textView1); 

    if (location == null) { 

     tv.setText("0.0"); 
    } else { 

     nCurrentSpeed = location.getSpeed(); 
     tv.setText(nCurrentSpeed + ""); 

    } 

Теперь здесь nCurrentSpeed ​​это значение генерируется каждый второй, Как я могу получить все значения, которые он генерирует, и генерируют в среднем все эти придирчиво.

+1

хранить эти результаты в массив и вычислить среднее значение после каждого сбора данных. –

+0

Сохраняет сумму всех значений и количество раз, когда значения были обновлены, сумма/счет будет средним. – Kai

ответ

0

Почему бы вам не добавить 2 переменные в свою активность?

private long startTime; 
private float pointAverage; 

те два инициализировать в onCreate() методе деятельности.

Теперь вы можете изменить ваш код

if (location == null) { 
     startTime = System.currentTimeMillis(); 
     pointAverage = 0; 
     actualizeTextField(); 
} 

(Это ваш Start, верно?)

else { 
     pointAverage += location.getSpeed(); 
     actualizeTextField(); 
} 

Наконец добавить что-то вроде этого

public void actualizeTextField() { 
     TextView tf = (TextView) findViewById(R.id.textView1); 

     if(count > 0) { 
      long timeOver = System.currentTimeMillis() - startTime; 
      tf.setText(String.valueOf(pointAverage/(timeOver/1000))); 
     } else { 
      tf.setText("0.0"); 
     } 
    } 
+0

Спасибо за усилия человека, последнее, что ценность, которую она показывает, не очень точная. Он немного ниже. Вы уверены, что логика вычисляет среднее значение? –

+0

Вы можете также замерить время, если подсчет. Я отредактирую свой ответ. Это должно дать вам значение в секунду. Извините за плохое форматирование, я пишу это с помощью своего Nexus. – Endzeit

+0

Bro Avg Скорость равна общему расстоянию, деленному на общее время. Можете ли вы отформатировать ответ в соответствии с этим. –

0

Одно из решений:

average speed = total distance/total time 

Таким образом, все, что вам нужно, чтобы получить total distance.

Вы держите переменную, чтобы представить последнюю location, называемый импульсно-дуговой и провести переменную, чтобы представить общее расстояние, называемое расстояние, то попробуйте добавить коды в onLocationChanged:

distance += location.distanceTo(preLocation); 
preLocation = location; 
averageSpeed = distance/totalTime; 
0
  1. Запишите время начала записи timeStart и начало местоположения startLocation;
  2. Записать текущее время timeCurrent и в настоящее время Местонахождение currentLocation;
  3. Вычислить среднюю скорость:

    //your spend time 
    int spendTime = timeCurrent - timeStart; 
    //the distance 
    float distance = currentLocation.distanceTo(startLocation) 
    //your average speed 
    averageSpeed = distance/spendTime 
    
Смежные вопросы