如何在这里修复java.lang.IndexOutOfBoundsException错误?

时间:2019-04-27 19:44:06

标签: java

我要做的是创建一个多边形对象,该对象由Point2D对象的ArrayList组成,然后找到其外围。

多边形类

public void addPoint(Point2D.Double p) {
    point.add((Point2D.Double) p);
}

public double perimeter() {
    double perimeter = 0.0;

    for (int i = 0; i < point.size(); i++) {
        perimeter += point.get(i).distance(point.get(i + 1));
    }
    return perimeter;
}

主班

Polygon polygon1 = new Polygon();

Point2D.Double p1 = new Point2D.Double(10, 20);
Point2D.Double p2 = new Point2D.Double(20, 30);
Point2D.Double p3 = new Point2D.Double(10, 40);

polygon1.addPoint(p1);
polygon1.addPoint(p2);
polygon1.addPoint(p3);

System.out.println(polygon1.perimeter());

2 个答案:

答案 0 :(得分:2)

您将获得i + 1对象,当您进行迭代时,该对象可能不存在于列表中。例如,如果列表中只有一个元素,则for循环将从0开始,因此i == 0会有这样的内容:

        perimeter += point.get(0).distance(point.get(0 + 1));

但是您在列表中没有索引为1的元素,因此它将引发异常。有两种方法可以解决此问题:

1)您可以将for循环更改为for (int i = 0; i < point.size()-1; i++)。然后在for循环之后手动增加最后一点的周长。

2)您可以保留循环,而只需添加条件:

if(i == point.size()-1`) {
        perimeter += point.get(i).distance(point.get(0));
}

答案 1 :(得分:2)

point.get(i + 1)在循环结束时不存在

使用int i = 0; i < point.size() - 1