【发布时间】:2014-11-16 02:56:22
【问题描述】:
我是数组列表的新手,我觉得这个问题会有点复杂。我正在尝试制作智能碰撞检测器。构造函数通过接收起始坐标并将它们添加到每个 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,我需要制作一个迭代器吗?我该怎么做?
【问题讨论】:
-
如果您读取异常而不是仅仅将其视为“错误”,您实际上会得到答案。
-
数组索引为零,因为您正在执行
pX.get(i+1),当i等于px.size() - 1时,您会遇到off-by-one error。 -
我以前从未听说过所谓的“脱骨”。
标签: java indexoutofboundsexception