【发布时间】:2016-11-03 11:27:00
【问题描述】:
我的代码
public List<GeoPoint> compute_polygon(List<GeoPoint> waypoints, double d)
{
int N = waypoints.size();//25
int T = 2 * N - 1;//49
// GeoPoint[] reduced_waypoints = waypoints.toArray(new GeoPoint[waypoints.size()]);
List<GeoPoint> polygon = new ArrayList<GeoPoint>(T);
for (int i = 1; i < N - 1; i++)
{
GeoPoint M = get_disp(waypoints.get(i - 1), waypoints.get(i), waypoints.get(i + 1), d);
polygon.add(i, v_add(waypoints.get(i), M));// here it fails and throws exception.
polygon.add(T-i, v_sub(waypoints.get(i), M));
}
}
错误输出
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.set(ArrayList.java:444)
at de.carbook.vendor.search.PathPolygon.compute_polygon(PathPolygon.java:40)
at de.carbook.vendor.search.Cleansing_the_waypoints.main(Cleansing_the_waypoints.java:41)
我无法找出导致问题的原因。
错误在polygon.add(i, v_add(waypoints.get(i), M));这里失败并抛出异常。
我试过polygon.add(index,element) 和polygon.set(index,element) 两种情况都失败了
在调试时我发现这一行 List<GeoPoint> polygon = new ArrayList<GeoPoint>(T); 被初始化为 null(空)。有问题吗?
更新 1
public List<GeoPoint> compute_polygon(List<GeoPoint> points, double d)
{
int N = points.size();//25
int T = 2 * N - 1;//49
GeoPoint[] waypoints = points.toArray(new GeoPoint[N]);
GeoPoint[] polygon = new GeoPoint[T];
for (int i = 1; i < N - 1; i++)
{
GeoPoint M = get_disp(waypoints[i - 1], waypoints[i], waypoints[i + 1], d);
polygon[i] = v_add(waypoints[i], M);
polygon[T - i] = v_sub(waypoints[i], M);
}
GeoPoint A = v_mul(v_nor(v_prp(v_sub(waypoints[1], waypoints[0]))), d);
GeoPoint B = v_mul(v_nor(v_prp(v_sub(waypoints[N-1], waypoints[N-2]))), d);
polygon[0] = v_add(waypoints[0], A); polygon[T] = v_sub(waypoints[0], A);
polygon[N - 1] = v_add(waypoints[N-1], B); polygon[N] = v_sub(waypoints[N-1], B);
List<GeoPoint> poly = new ArrayList<GeoPoint>(Arrays.asList(polygon));
System.out.println(poly);
return poly;
}
更新错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 49
at de.carbook.vendor.search.PathPolygon.compute_polygon(PathPolygon.java:67)
at de.carbook.vendor.search.Cleansing_the_waypoints.main(Cleansing_the_waypoints.java:41)
【问题讨论】:
-
使用
polygon.add( v_add(waypoints.get(i), M))而不是polygon.add(i, v_add(waypoints.get(i), M)) -
@Jens 但我需要这些索引来按顺序排列点。
-
但是你用两个语句以相同的顺序添加它。
-
从
i=0而不是1开始循环。 -
编辑后:
polygon[T]-> 大小为 T ,因此您的最大允许索引为 T-1。
标签: java arraylist initialization runtime-error indexoutofboundsexception