从ArrayList中删除,基于它的大小进行循环,但删除后仍然会断开OutOfBounds

时间:2014-02-18 04:32:23

标签: for-loop arraylist size break indexoutofboundsexception

好吧所以我从数组列表中删除一个对象,然后中断,但我仍然得到OutOfBounds,我有点困惑,有人可以帮助我,我试图隔离问题,但我仍然无法想象它出来了。

这是我得到的错误:

Exception in thread "Thread-2" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:635)
    at java.util.ArrayList.get(ArrayList.java:411)
    at GameFunctions.closestTarget(GameFunctions.java:37)
    at GameFunctions.act(GameFunctions.java:147)
    at GamePanel$1.run(GamePanel.java:50)

以下是导致我出现问题的两种方法:

public void act(ArrayList<Germs> g, ArrayList<WhiteBloodCell> p, String actor)
  {
    if(actor.equals("Germs"))
    { 
      for(int i=0;i<g.size();i++)
      {
        if(g.get(i) instanceof SPneumoniae)
        {
          g.get(i).move();
          g.get(i).testBounds();
          if(checkSize(g, i))
          {
            System.out.println("broken");
            break;
          }
        }
      }
    }
    else if(actor.equals("WhiteBloodCells"))
    {
      for(int i=0;i<p.size();i++)
      {
        p.get(i).setTarget(closestTarget(g, p.get(i)));
        p.get(i).move();
      }
    }
  }

以下是调用删除对象的方法:

public boolean checkSize(ArrayList<Germs> g, int i)
  {
    if(g.get(i).getRadius() > 30)
    {
      g.get(i).setRadius(30);
    }
    else if(g.get(i).getRadius() <= 0)
    {
      g.remove(i);
      return true;
    }

    return false;
  }

1 个答案:

答案 0 :(得分:0)

看起来错误是由于g的ArrayList中没有任何内容。

查看代码的这个区域:

else if(actor.equals("WhiteBloodCells"))
{
  for(int i=0;i<p.size();i++)
  {
    p.get(i).setTarget(closestTarget(g, p.get(i)));
    p.get(i).move();
  }
}

看看是否能为您提供任何线索。

编辑 - 错误IS来自基于列出的例外的nearestTarget函数。