我试图在点击时保存鼠标位置的位置。然后我需要分析它的动作以执行特定任务。我使用了mouseListener接口,当用户点击鼠标时我添加点击点然后,当用户点击一个按钮时,我尝试循环遍历数组来分析动作,但我在if(points[i].x<points[i+1].x)
处得到一个空指针异常
这是代码
Point points[] = new Point[2000];
int numPoints = 0;
void eventOutput(String eventDescription, MouseEvent e) {
System.out.println(eventDescription+" X= "+e.getX()+" Y= "+e.getY());
//xList.add(new Integer(e.getX()));
//yList.add(new Integer(e.getY()));
points[numPoints] = new Point(e.getX(), e.getY());
++numPoints;
}
for(int i=0;i<points.length;i++)
{
System.out.println("In MOO "+points[i].x);
if(points[i].x<points[i+1].x)
{
xInc=true;
if(points[i].y<points[i+1].y)
{
yInc=true;
}
else if(points[i].y>points[i+1].y)
{
yDec=true;
}
}
else if(points[i].x>points[i+1].x)
{
xDec=true;
if(points[i].y<points[i+1].y)
{
yInc=true;
}
else if(points[i].y>points[i+1].y)
{
yDec=true;
}}}}
有人可以帮我解决这个问题。谢谢提前
答案 0 :(得分:4)
你不想遍历所有数组 - 你只想循环到numPoints
,因为以后的条目是空的,对吧?实际上,如果你要将一个元素与下一个元素进行比较,那么你实际上只想循环到i < numPoints-1
,这样你最后还有一个元素可以与之比较。
考虑使用像List
这样的ArrayList
而不是数组 - 这样可以更容易避免这样的问题。
答案 1 :(得分:2)
你必须在
处迭代到numPoints而不是points.lengthfor(int i=0;i<points.length;i++)
points.length是数组的总大小,而不是包含的元素数。