在数组中存储变量值以查找平均速度

时间:2015-08-21 13:11:23

标签: java arrays

我使用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));
    }

}

1 个答案:

答案 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最初提出的相似)