java有人能指导我克服这个逻辑错误吗?
我试图删除arraylist deck
中的所有元素,但出于某种原因deck.size()
应该是52,返回26,并且只删除了26个元素
public void remove()
{
int k = 0;
while(k < deck.size())
{
deck.remove(0);
k++;
}
}
我在main
中调用了numberOfCards()
,它返回deck.size()
,它返回52。所以我不知道为什么remove中的deck.size()
只返回26
# 1 楼答案
因为计算机正在做你让它做的事情
k
设置为0李>deck.size()
,返回520 < 52
,因此它进入循环李>deck
中删除第一个元素李>k
(将其设置为1)李>deck.size()
,返回511 < 51
,因此它再次进入循环李>deck
中删除第一个元素李>k
(将其设置为2)李>deck.size()
,返回502 < 50
,因此它再次进入循环李>k
(将其设置为25)李>deck.size()
,返回2725 < 27
,因此它再次进入循环李>deck
中删除第一个元素李>k
(将其设置为26)李>deck.size()
,返回2626 < 26
不是真的,因此它跳到循环的末尾,即使deck
中还有26个元素李># 2 楼答案
移除元素,减小大小,同时重新使用
k
,这将在甲板大小的一半时达到平衡while循环应该是:
# 3 楼答案
问题是,在每次迭代中,当数据组的大小减小时,增加k,所以k和数据组。size()将在中途“相遇”,因此在26
您只需执行以下操作即可解决此问题:
# 4 楼答案
你不必重新发明轮子。要从列表中删除所有元素,只需调用:
这将从列表中删除所有元素