1
我正在執行for-loop
內的邏輯,它將從狗窩對象中刪除狀態爲「ACCEPTED」的任何狗對象。刪除arrayList中的項目:試圖從不存在的索引中刪除?
請注意,一個狗窩可以有一個列表許多狗。
循環:
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
如何更改上面的邏輯以確保所有項都從陣列中刪除?
這似乎工作,這是一個合適的解決方案或只是一個解決方法? – java123999
例如,如果列表中有5個對象,並且您刪除了第3個對象。現在索引改變了,並且以前的第4個對象的索引現在是2(列表中的第3個對象)。所以我認爲這是一個合適的解決方案。有關詳細信息,我將編輯答案並嘗試提供更多示例 –
正確的解決方案是首先不要使用ArrayList和循環修改。在你的情況下,你可以複製剩餘的狗到一個新的列表。 'n = ArrayList(dogList.size());對於{(d:dogList)if!d.getStatus()。equals(「ACCEPTED」)n.add(d); } dogList = n;'。這與溪流變得更清潔。 – eckes