Thanks. The answer was staring me in the face, but I just couldn't see it. On Tue, Nov 17, 2009 at 2:52 AM, Sean Luke <[log in to unmask]> wrote: > On Nov 17, 2009, at 11:21 AM, Paul Smaldino wrote: > > public Bag findNotPlayed(Bag neighbors){ >> for(int k = 0; k < neighbors.numObjs; k++){ >> Agent a = (Agent)neighbors.get(k); >> if(a.equals(this) || a == this){ >> neighbors.removeNondestructively(k); >> break; >> } >> } >> int num = neighbors.numObjs; >> for(int i=0; i < num; i++){ >> Agent a = (Agent)neighbors.get(i); >> if(a.played) >> neighbors.removeNondestructively(i); >> } >> return neighbors; >> } >> >> >> In the second for loop, when I used i < neighbors.numObj, the method >> removed >> only one of the two agents who had played. When I substituted the local >> variable num, I got a IndexOutOfBounds exception. >> > > Every time you remove an object from the bag, it shrinks in size (that is, > neighbors.numObjs decreases by one). You test for this in the first > example; but in the second, you've already loaded the very first numObjs > into num and continue using that same number. > > Sean > -- ____________________________ Paul Smaldino Department of Psychology University of California, Davis [log in to unmask]