使用行点迭代arraylist以检查交集时出错

时间:2013-05-03 06:05:02

标签: java android math

我正在开发一些代码来检查行之间的交集。我将这些行的所有点存储在一个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)) {

                }
            }
        }
    }

1 个答案:

答案 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都有一对点。这将更容易使用。