我正在尝试从我创建的 arrayList 计算线段(长度)。 这是JAVA中的。一切都按照我想要的方式进行,但是我收到以下消息: “线程“主”中的异常 java.lang.IndexOutOfBoundsException:索引:2,大小:2 在 java.util.ArrayList.rangeCheck(来源未知) 在 java.util.ArrayList.get(来源未知) ”
数组列表的索引为“+1”会引起麻烦。这就是导致错误消息的原因,但是,它确实计算了线段。它打印它们,然后打印可怕的错误语句。
myPoints.get((i+1)).x ; <--- (i+1) 造成了麻烦 tempYFirst = myPoints.get(i).y; <---没有+1也能正常工作,但它不会做我想要它做的事情。
public static void showStats(ArrayList<Point> myPoints)
{
double distance = 0.0;
double length;
double tempX;
double tempY;
double tempX2;
double tempY2;
int tempFirst;
int tempSecond;
int tempYFirst;
int tempYSecond;
int xValue;
int yValue;
// Line segments are calculated by the distance formula of:
// Sqrt ( (x2-x1)^2 + (y2-y2)^2)
for (int i = 0; i < myPoints.size(); i++) {
tempFirst = myPoints.get(i).x;
tempSecond = myPoints.get((i+1)).x ;
tempYFirst = myPoints.get(i).y;
tempYSecond = myPoints.get((i+1)).y;
xValue = tempFirst - tempSecond;
yValue = tempYFirst - tempYSecond;
tempX2 = Math.pow(xValue, 2);
tempY2 = Math.pow(yValue, 2);
distance += Math.sqrt((tempX2 + tempY2));
System.out.println(tempSecond);
}// /
}
最佳答案
您正在尝试获取索引 2 处的 Point
,但只有 2 个点,并且在 Java 中,索引只能从 0
到 size - 1
,或在本例中为1
。问题出在这一行
tempSecond = myPoints.get((i+1)).x ;
当i
为1时,i + 1
为2
并且超出范围。在最后一个点
时,最好与第一个点
进行比较以完成循环:
tempSecond = myPoints.get((i+1) % myPoints.size()).x ;
这使用 %
模运算符来获取除以 myPoints.size()
时的余数,这样当 i + 1
得到时太大了,0
就是结果,即size
除以size
的余数是0
。
关于java - 来自点数组列表的段长度 --Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699678/