java - 来自点数组列表的段长度 --Java

标签 java point indexoutofboundsexception

我正在尝试从我创建的 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 中,索引只能从 0size - 1 ,或在本例中为1。问题出在这一行

tempSecond = myPoints.get((i+1)).x ;

i为1时,i + 12并且超出范围。在最后一个时,最好与第一个进行比较以完成循环:

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/

相关文章:

c++ - 为什么会出现 “vector out of range”错误?

java - Grizzly 服务器索引页无法正常工作

java - 为什么我的 TCP 系统比 UDP 系统快?

iphone - 如何在 iOS 设备上的触摸周围显示圆圈?

javascript - Three.js - 积分

c++ - 默认情况下,为什么 C++ 不检测何时使用 [ ] 运算符访问超出范围的 vector 元素?

java - ArrayIndexOutOfBoundsException 错误,但我认为代码没问题

java - Alfresco 上下文初始化失败 : NoClassDefFoundError

Java - 登录网站并使用 SSL/TLSv1 检索数据

java - 从 ArrayList 获取坐标(x,y)的快速方法?