如何对浮点数数组求和

How to sum of arrays of floating point numbers

如何对浮点数数组求和..作为数组浮点数来自距离结果的结果 Google 映射 api 中的方法 Location.distanceBetween(latStart, longStart, latB, longB, results); ,i'我正在尝试这个,但在某些时候它会减少,它应该总是增加。我错过了什么?

编辑:

public float total(ArrayList<LatLng> listPoints){
        if(listPoints.size()==2){
            listPoints.clear();
        }
        listPoints.add(latLng);
        float[] results = new float[2];
        float sum  = 0.0f;
        for (int z = 0; z < listPoints.size(); z++) {
            if(listPoints.size() == 1){
                latStart = listPoints.get(z).latitude;
                longStart = listPoints.get(z).longitude;
                Toast.makeText(this, "listPoint 1", Toast.LENGTH_SHORT).show();
            }else if(listPoints.size() == 2){
                latB = listPoints.get(z).latitude;
                longB = listPoints.get(z).longitude;
                Toast.makeText(this, "listPoint 2", Toast.LENGTH_SHORT).show();
            }
            Location.distanceBetween(latStart, longStart, latB, longB, results);
            sum+=results[0];
        }
        tvJarakTotal.setText(sum + "");
        return sum;
    }

编辑: 随着用户位置的移动,距离来自 onLocationChanged() 方法,

编辑: 我终于自己找到了解决方案,方法是使用 sharedPreference 创建一些技巧。但接受的答案对问题是正确的。

您认为您在上面的代码中做了什么并不完全清楚。首先,Location#distanceBetweenAPI取纬度经度值,即两个地理点,然后returns它们之间的距离在 results[0] (q.v. documentation).

接下来,不清楚起点和终点是什么。我在下面的回答是假设 listPoints 是一组点(开始或结束),而值 latBlongB 是一组固定的 starting/ending 点.如果没有这个假设,这里真的无法给出答案。

public float total(ArrayList<LatLng> listPoints) {
    float[] results;
    float sum = 0.0f;
    for (int z=0; z < listPoints.size(); z++) {
        double latStart = listPoints.get(z).latitude;
        double longStart = listPoints.get(z).longitude;
        Location.distanceBetween(latStart, longStart, latB, longB, results);
        sum += results[0];
        tvJarak.setText(sum + "");
    }

    return sum;
}

请仔细查看您的代码。

float[] results = new float[listPoints.size()];

results 变量被声明为局部变量,但尚未用任何值初始化。 在这种情况下,它具有随机值。

这就是为什么sum给出随机负值。

float[] results = new float[listPoints.size()];

在这种情况下,您的结果数组存储了 listPoints 数组的大小。之后,您尝试使用 listPointers 数组大小来迭代结果数组。

假设您:- float [] results = new [2];

现在你尝试在你体内一次又一次地添加相同的值以进行循环。请确保您的场景是否正确。

您应该在代码中存储 api 日期软件。像这样:

lat = listPoints.get(z).latitude;
long = listPoints.get(z).longitude;

如果你愿意,你可以这样做,

public float total(ArrayList<LatLng> listPoints) {
    float[] results;
    float sum = 0.0f;
    float lat = 0.0f, long = 0.0f;
    for (int z=0; z < listPoints.size(); z++) {
        lat = listPoints.get(z).latitude;
        long = listPoints.get(z).longitude;
        Location.distanceBetween(lat, long, latB, longB, results);
        sum+=results[z];
        tvJarak.setText(sum + "");
    }

    return sum;
}