日期:2014-05-20  浏览次数:20795 次

关于 Vector 求解
我定义了2个 vector v1,v2;
v1存放 圆,v2存放 方块, 圆有个碰撞的 方法 hit(int x,int y,int x1,int y1)
  然后 进行双循环。
for(int i = 0 ; i < v1.size(); i ++ ){
  for(int j = 0 ; j < v2.size(); j ++){
  if(v1.elementAt(i).hit(v1.elementAt(i).x,v1.elementAt(i).y,v2.elementAt(j).x,v2.elementAt(j).y)){
  v1.remove(i); // 碰撞到了 就进行删除的操作!
  v2.remove(j);
  }
 }
}
大概就是这样的,但是 经常会报数组越界的错误, 0>=0 啊,1>=1 这样。让我烦恼不已。
按理说 vector 是线程同步的,怎么会越界呢?
求高手指教!
小弟感激不尽!


------解决方案--------------------
请用Iterator遍历,然后用iterator.remove进行删除
------解决方案--------------------
你连着两个remove,第二次remove的参数不能保证在合法的index范围内了
------解决方案--------------------
remove()之后,i--, j--
------解决方案--------------------
v1.remove(i);会影响到v1.size()和v1的排列,这个时候遍历v1就出问题了,
v2也有一样的问题,
我觉得越界应该出在v1上面,因为remove()之后i<v1.size()不会马上判断,而事实上v1.size()变小了
加i--,j--