2011-05-13 102 views
0

我想保存鼠标位置的位置 - click.Then我需要分析它的议案做一个特定的task.I使用mouseListener接口,当用户点击鼠标我添加点击的点array.Then当用户点击一个按钮,我试图遍历阵列来分析所述运动的点,但我得到在if(points[i].x<points[i+1].x) 这里一个零指示字例外是代码保存在java中的鼠标点击

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

首先,您的循环应停在points.length-1上,因为您正在使用循环i + 1。其次,你确定你在阵列中存储了2000点对象吗? – VirtualTroll 2011-05-13 18:07:54

+0

@Amine不,我刚刚发现,我现在就改变它。非常感谢你指出这一点。 – 2011-05-13 18:13:34

回答

4

你不想遍历所有的数组 - 你只想循环到numPoints,因为后面的条目是空的,对吗?事实上,如果你打算比较一个元素和下一个元素,那么你实际上只想循环到i < numPoints-1,这样你就可以在末尾再比较一下。

考虑使用List类似于ArrayList而不是数组 - 更容易避免这样的问题。

+0

+1使用points.length -1 – 2011-05-13 18:09:05

+1

+1指出阵列不是最好的解决方案。也没有什么可以防止'numPoints'超过2000. – unholysampler 2011-05-13 18:10:13

+0

是的你是对的,但实际上我使用ArrayList,但我得到了同样的问题,所以我改变它为点数组,但我想问题是循环直到2000年。谢谢这么多,我会试试它。 – 2011-05-13 18:12:46

2

必须在

for(int i=0;i<points.length;i++) 

points.length迭代至多为NumPoints代替points.length是阵列的总大小,它包含的元素数量不限。