Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArrayList:java.lang.IndexOutOfBoundsException:索引:283,大小:283_Java_Algorithm_List_Arraylist - Fatal编程技术网

ArrayList:java.lang.IndexOutOfBoundsException:索引:283,大小:283

ArrayList:java.lang.IndexOutOfBoundsException:索引:283,大小:283,java,algorithm,list,arraylist,Java,Algorithm,List,Arraylist,我已经写了一个算法来计算一次行程中车辆跟在轨道上的距离。轨道上的每个点都有一个(lat,lon)。这是我的代码,我得到上面提到的错误 List<TrackPoint> tp = new ArrayList<TrackPoint>(); for (int i = 0; i < tp.size(); i++) { double lat1 = tp.get(i).getLat(); double l

我已经写了一个算法来计算一次行程中车辆跟在轨道上的距离。轨道上的每个点都有一个(lat,lon)。这是我的代码,我得到上面提到的错误

List<TrackPoint> tp = new ArrayList<TrackPoint>();    

for (int i = 0; i < tp.size(); i++) {
    double lat1 = tp.get(i).getLat();                        
    double lat2 = tp.get(i + 1).getLat();
    double lon1 = tp.get(i).getLon();                       
    double lon2 = tp.get(i + 1).getLon();
    double radlat1 = Math.PI * lat1 / 180;
    double radlat2 = Math.PI * lat2 / 180;
    double theta = lon1 - lon2;
    double radtheta = Math.PI * theta / 180;
    double dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515; 
    dist = dist * 1609.344;// distance in miles
    double _KM = 1000; //KM the unit of distance                       
    //distance in km
    double distInKM = dist / _KM;
    DecimalFormat df = new DecimalFormat("###.###");
    double dt = Double.parseDouble(df.format(distInKM));
    double mileage = 0;
    mileage += mileage + dt;       
    tp.get(i).setMileage(mileage);                       
}
此错误指向以下行:
double-lat2=tp.get(i+1.getLat()

我认为这个错误与列表大小有关,但我不知道为什么?有人帮我看看我有什么问题。

当你转到循环中的最后一个对象(
TrackPoint
)时,
i+1
元素不存在

double lat2 = tp.get(i + 1).getLat();

当您转到循环中的最后一个对象(
TrackPoint
)时,
i+1
元素不存在

double lat2 = tp.get(i + 1).getLat();

当您转到循环中的最后一个对象(轨迹点)时,(i+1)个元素不存在。希望下面的代码可以

List<TrackPoint> tp = new ArrayList<TrackPoint>();    

for (int i = 0; i < tp.size()-1; i++) {
    double lat1 = tp.get(i).getLat();                        
    double lat2 = tp.get(i + 1).getLat();
    double lon1 = tp.get(i).getLon();                       
    double lon2 = tp.get(i + 1).getLon();
    double radlat1 = Math.PI * lat1 / 180;
    double radlat2 = Math.PI * lat2 / 180;
    double theta = lon1 - lon2;
    double radtheta = Math.PI * theta / 180;
    double dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515; 
    dist = dist * 1609.344;// distance in miles
    double _KM = 1000; //KM the unit of distance                       
    //distance in km
    double distInKM = dist / _KM;
    DecimalFormat df = new DecimalFormat("###.###");
    double dt = Double.parseDouble(df.format(distInKM));
    double mileage = 0;
    mileage += mileage + dt;       
    tp.get(i).setMileage(mileage);                       
}
List tp=new ArrayList();
对于(int i=0;i
当您转到循环中的最后一个对象(轨迹点)时,(i+1)个元素不存在。希望下面的代码可以

List<TrackPoint> tp = new ArrayList<TrackPoint>();    

for (int i = 0; i < tp.size()-1; i++) {
    double lat1 = tp.get(i).getLat();                        
    double lat2 = tp.get(i + 1).getLat();
    double lon1 = tp.get(i).getLon();                       
    double lon2 = tp.get(i + 1).getLon();
    double radlat1 = Math.PI * lat1 / 180;
    double radlat2 = Math.PI * lat2 / 180;
    double theta = lon1 - lon2;
    double radtheta = Math.PI * theta / 180;
    double dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515; 
    dist = dist * 1609.344;// distance in miles
    double _KM = 1000; //KM the unit of distance                       
    //distance in km
    double distInKM = dist / _KM;
    DecimalFormat df = new DecimalFormat("###.###");
    double dt = Double.parseDouble(df.format(distInKM));
    double mileage = 0;
    mileage += mileage + dt;       
    tp.get(i).setMileage(mileage);                       
}
List tp=new ArrayList();
对于(int i=0;i
问题就在这里

tp.get(i + 1)
i
等于
tp.size-1
时,使其等于
tp.size()
。要解决此问题,请将循环更改为:

for (int i = 0; i < tp.size() - 1; i++) {
for(int i=0;i
问题就在这里

tp.get(i + 1)
i
等于
tp.size-1
时,将其设置为
tp.size()
。要解决此问题,请将循环更改为:

for (int i = 0; i < tp.size() - 1; i++) {
for(int i=0;i
您循环迭代直到列表大小。但在上一次迭代中,您尝试获取在您的案例中不存在的(i+1)索引

double lat2 = tp.get(i + 1).getLat();

更正此错误。获取(i+1)。

循环迭代到列表大小。但在上一次迭代中,您尝试获取在您的案例中不存在的(i+1)索引

double lat2 = tp.get(i + 1).getLat();

更正此错误。获取(i+1)。

以上所有答案都是正确的。或者可以使用下面的代码进行尝试

List<TrackPoint> tp = new ArrayList<TrackPoint>();
    for (int i = 0; i < tp.size(); i++) {
    double lat1 = tp.get(i - 1).getLat();                        
    double lat2 = tp.get(i).getLat();
    double lon1 = tp.get(i - 1).getLon();                       
    double lon2 = tp.get(i).getLon();
    double radlat1 = Math.PI * lat1 / 180;
    double radlat2 = Math.PI * lat2 / 180;
    double theta = lon1 - lon2;
    double radtheta = Math.PI * theta / 180;
    double dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515; 
    dist = dist * 1609.344;// distance in miles
    double _KM = 1000; //KM the unit of distance                       
    //distance in km
    double distInKM = dist / _KM;
    DecimalFormat df = new DecimalFormat("###.###");
    double dt = Double.parseDouble(df.format(distInKM));
    double mileage = 0;
    mileage += mileage + dt;       
    tp.get(i - 1).setMileage(mileage);
}
List tp=new ArrayList();
对于(int i=0;i
以上所有答案都是正确的。您也可以使用下面的代码进行尝试

List<TrackPoint> tp = new ArrayList<TrackPoint>();
    for (int i = 0; i < tp.size(); i++) {
    double lat1 = tp.get(i - 1).getLat();                        
    double lat2 = tp.get(i).getLat();
    double lon1 = tp.get(i - 1).getLon();                       
    double lon2 = tp.get(i).getLon();
    double radlat1 = Math.PI * lat1 / 180;
    double radlat2 = Math.PI * lat2 / 180;
    double theta = lon1 - lon2;
    double radtheta = Math.PI * theta / 180;
    double dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515; 
    dist = dist * 1609.344;// distance in miles
    double _KM = 1000; //KM the unit of distance                       
    //distance in km
    double distInKM = dist / _KM;
    DecimalFormat df = new DecimalFormat("###.###");
    double dt = Double.parseDouble(df.format(distInKM));
    double mileage = 0;
    mileage += mileage + dt;       
    tp.get(i - 1).setMileage(mileage);
}
List tp=new ArrayList();
对于(int i=0;i