我正在开发一些代码来检查行之间的交集。我将这些行的所有点存储在一个arraylist中,下面我有一些代码来迭代抛出arraylist来比较当时的两行。但是我从这一行收到一条错误消息:Line line2 = new Line(points.get(j), points.get(j+1));
导致错误的是j+1
。如果我只有j
那么这没问题,但是我没有得到下一个点!?我不能这样做或者我在某种程度上想错了吗?帮助预先找到错误或建议替代解决方案。
// Intersection control
if(touchActionUp) {
for (int i = 0; i < points.size()-3; i++) {
Line line1 = new Line(points.get(i), points.get(i+1));
for (int j = i + 2; j < points.size(); j++) {
Line line2 = new Line(points.get(j), points.get(j+1));
// Call method to check intersection
if(checkIntersection(line1, line2)) {
}
}
}
}
答案 0 :(得分:4)
是的,这就是问题所在:
for (int j = i + 2; j < points.size(); j++) {
Line line2 = new Line(points.get(j), points.get(j+1));
这将继续递增,直到并包括 j = points.size() - 1
,此时调用points.get(j+1)
将有效地调用points.get(points.size())
这是一个无效的索引。
你只想要一个较小的下限:
for (int j = i + 2; j < points.size() - 1; j++) {
它看起来像,就像你没有正确使用积分列表一样 - 如果你试图在列表中使用对点,那么{ {1}}和i++
应为j++
和i += 2
- 否则您将从索引为(0,1),(1,2)的点创建行,( 2,3,等等也许这是你的意图 - 如果这些是描述单一形状的线条,例如......但如果不是,我鼓励你创建一个{{相反,每个j += 2
都有一对点。这将更容易使用。