我正在实现for-loop中的逻辑,该逻辑将从犬舍对象中删除状态为“接受”的任何狗对象。
注意,一只犬类可以有一张列有许多狗的名单。
循环:
allDogsInKennel = kennel.getDogsList();
for (int i = 0; i < allDogsInKennel.size(); i++) {
//delete any dog object with a status of Accepted
if (allDogsInKennel.get(i).getStatus() == "ACCEPTED") {
kennel.removeDog(allDogsInKennel.get(i));
}
}removeDog方法
public void removeDog(Dog d) {
this.dogList.remove(d);
}我遇到的问题是,清单上所有的6狗都应该被删除,但目前只有3被删除。
示例:
original size of list = 6 items
Item removed from index 0 = 5 items
Item removed from index 1 = 4 items
item removed from index 2 = 3 items现在,在下一次迭代中,由于index 3条件的原因,循环尝试从i++中移除,但是数组将只转到index 2,因为它现在只有索引处的3项:
0, 1, 2如何更改上面的逻辑以确保从数组中删除所有的项?
发布于 2016-02-29 12:04:45
当您从列表中删除一个对象时,您可以添加I;
for (int i = 0; i < allDogsInKennel.size(); i++) {
//delete any dog object with a status of Accepted
if (allDogsInKennel.get(i).getStatus().equals("ACCEPTED")) {
kennel.removeDog(allDogsInKennel.get(i));
i--
}
}让我们假设您有一个数组列表,并且有字符串obj1、obj2、obj3
ArrayList<String> lst = new ArrayList<String>();
lst.add("obj1");
lst.add("obj2");
lst.add("obj3");
for (int i = 0; i < lst.size(); i++) {
String str = lst.get(i);
lst.remove(str); //list size decrease,
//so when you remove an object with index 0, your new list has obj2(at index 0) and obj3(at index 1)
//when i is increased, it will escape obj2, it never check it or access it.
//i--; //open to give a try
}
for (int i = 0; i < lst.size(); i++) {
System.out.println(lst.get(i)); //will print obj2
}预期是删除列表中的所有项,因此我必须添加i--在删除方法之后添加。
https://stackoverflow.com/questions/35699076
复制相似问题