在Java中,当我使用ArrayList.get(i)时,我得到一个IndexOutOfBoundsException

时间:2014-11-16 02:56:22

标签: java indexoutofboundsexception

我是数组列表的新手,我觉得这个问题会有点复杂。我正在尝试制作智能碰撞探测器。构造函数通过接收起始坐标并将它们添加到每个ArrayList来开始多边形。 AddVertex()方法为每个方法添加另一组坐标,End()方法在第一个坐标的位置添加另一对坐标。然后我有一个名为MouseCollision()的方法,它返回一个布尔值并测试鼠标是否在多边形内。如果点顺时针排列,则测试鼠标是否在形状内,但如果逆时针创建多边形,则将测试负形状的鼠标。我正在使用一个不等式系统来确定鼠标是否位于该行的正确一侧,它在该部分中变得复杂。

无论如何,这是Detector.java的全文:

    package helpers;

import java.util.*;

import org.lwjgl.input.Mouse;

import static helpers.Artist.*;

public class Detector {

    List<Float> pX, pY, b, m;
    boolean colliding;

    public Detector(float pX, float pY) {;
        this.pX = new ArrayList<Float>();
        this.pY = new ArrayList<Float>();
        this.pX.add(pX);
        this.pY.add(pY);
    }

    public void AddVertex(float pX, float pY) {
        this.pX.add(pX);
        this.pY.add(pY);
    }

    public void End() {
        this.pX.add(pX.get(0));
        this.pY.add(pY.get(0));
    }

    public boolean MouseColliding() {
        colliding = true;
        this.m = new ArrayList<Float>();
        this.b = new ArrayList<Float>();

        for (int i=0; i<pX.size(); i++) {
            if (pX.get(i+1)-pX.get(i) == 0) {
                if (pY.get(i+1)-pY.get(i) > 0) {
                    if (Mouse.getX() >= pX.get(i)) {}
                    else colliding = false;
                } else {
                    if (Mouse.getX() <= pX.get(i)) {}
                    else colliding = false;
                }
            } else {
                m.add(pY.get(i+1) - pY.get(i)/pX.get(i+1) - pX.get(i));
                b.add(pY.get(i) - m.get(i)*pX.get(i));
                if (pX.get(i+1)-pX.get(i) > 0) {
                    if (HEIGHT - Mouse.getY() <= m.get(i)*Mouse.getX()+b.get(i)) {}
                    else colliding = false;
                } else {
                    if (HEIGHT - Mouse.getY() >= m.get(i)*Mouse.getX()+b.get(i)) {}
                    else colliding = false;
                }
            }
        }

        if (colliding) return true;
        else return false;
    }


}

每当我尝试运行程序时,我也会收到错误消息:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at helpers.Detector.MouseColliding(Detector.java:47)
    at data.Boot.<init>(Boot.java:57)
    at data.Boot.main(Boot.java:72)

我不知道我做错了什么,我去了第47行:b.add(pY.get(i) - m.get(i)*pX.get(i));我不知道问题是什么。 我对ArrayLists了解,我是否需要制作Iterator?我该怎么做?

1 个答案:

答案 0 :(得分:0)

将for循环更改为for (int i=0; i<pX.size()-1; i++) {迭代应为

px.size() - 1因此您的pX.get(i+1)不会导致IndexOutOfBoundsException例外。