0

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

                }
            }
        }
    }
4

1 回答 1

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++) {

在我看来,您似乎没有正确使用点列表 - 如果您尝试使用列表中的点,那么i++并且j++应该是i += 2并且j += 2- 否则您将从索引的点创建线(0, 1), (1, 2), (2, 3) 等。也许这就是你的意图 - 如果这些是描述单个形状的线条,例如......但如果不是,我会鼓励您可以创建一个List<Line>,其中每个Line都有一对点。这将更容易使用。

于 2013-05-03T06:08:06.977 回答