我使用location.speed()
函数从gps获取速度,值将存储在nCurrentSpeed
中。
我应该将nCurrentSpeed
值存储在数组中以获取应用程序停止时的平均速度吗?我该怎么做?
@Override
public void onLocationChanged(Location location) {
TextView dis =(TextView)findViewById(R.id.distance);
TextView time1 =(TextView)findViewById(R.id.time);
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "SPEEDOFONT.TTF");
text2 = (TextView) findViewById(R.id.text2);
text2.setTypeface(myTypeface);
float speed,time, distance;
if (location == null) {
text2.setText("-.- km/h");
} else {
float nCurrentSpeed = location.getSpeed();
speed = (float) (nCurrentSpeed * 3.6);
text2.setText(String.format("%.2f km/h", speed));
time =location.getTime();
time1.setText("" +time);
distance = speed*time;
dis.setText(String.format("%.2f m/s", distance));
}
}
答案 0 :(得分:1)
它可能不适用于实际(非常具体)的问题,但你也可以使用DoubleSummaryStatistics
:你可以创建这个类的实例,然后让它accept
之后的一个值另外,最后get the average没有进行手动计算 - 顺便说一下,你可以免费计算最小值和最大值。
private final DoubleSummaryStatistics stats = new DoubleSummaryStatistics();
public void onLocationChanged(Location location)
{
...
float speed = ...;
stats.accept(speed);
}
void printSummary()
{
double average = stats.getAverage();
double min = stats.getMin();
double max = stats.getMax();
...
}
编辑:
如果您还没有使用Java 8,可以执行
private final List<Float> speeds = new ArrayList<Float>();
public void onLocationChanged(Location location)
{
...
float speed = ...;
speeds.add(speed);
}
private float computeAverage(List<Float> values)
{
float sum = 0;
for (Float v : values)
{
sum += v;
}
return sum / values.size();
}
void printSummary()
{
double average = computeAverage(speeds);
...
}
(与@AndrewTobilko最初提出的相似)