我要做的是创建一个多边形对象,该对象由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());
答案 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