如何对浮点数数组求和。.由于数组浮点数的距离结果来自Google maps api中的结果Location.distanceBetween(latStart, longStart, latB, longB, results);
方法,我正在尝试使用此方法,但有时减少,则应始终增加。我想念什么?
编辑:
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创建一些技巧来自己找到解决方案。但是接受的答案对这个问题是正确的。
答案 0 :(得分:1)
目前尚不清楚您在上面的代码中在做什么。首先,Location#distanceBetween
API接收纬度经度值的一个对,即两个地理点,然后以results[0]
返回它们之间的距离({ 3}})。
接下来,不清楚起点和终点是什么。我在假设listPoints
是一组点(起点或终点),而价位latB
和longB
是一组固定的起点/终点的情况下回答了这一问题。没有这个假设,这里的答案真的无法给出。
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;
}
答案 1 :(得分:0)
请仔细查看您的代码。
"Impact"
float[] results = new float[listPoints.size()];
变量被声明为局部变量,但尚未使用任何值初始化。
在这种情况下,它具有随机值。
这就是results
给出随机负值的原因。
答案 2 :(得分:0)
float[] results = new float[listPoints.size()];
在这种情况下,结果数组存储listPoints数组的大小。之后,您尝试使用listPointers数组大小来迭代结果数组。
假设您的:-float [] results = new [2];
现在,您尝试一次又一次地将相同的值累加起来以进行循环。请确保您的方案正确与否。
您应该在代码中存储api date someware。像这样:
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;
}