我正在尝试删除arraylist deck
中的所有元素,但由于某种原因deck.size()
应该是52返回26并且只删除了26个元素。
public void remove()
{
int k = 0;
while(k < deck.size())
{
deck.remove(0);
k++;
}
}
我在numberOfCards()
中调用main
,返回deck.size()
并返回52.所以我不知道为什么删除deck.size()
只返回26。
答案 0 :(得分:6)
因为计算机完全按照你的要求去做。
k
设置为0. deck.size()
,返回52. 0 < 52
,因此它进入循环。deck
中删除第一个元素。k
(将其设置为1)。deck.size()
,返回51. 1 < 51
,然后再次进入循环。deck
中删除第一个元素。k
(将其设置为2)。deck.size()
,返回50. 2 < 50
,然后再次进入循环。k
(将其设置为25)。deck.size()
,返回27. 25 < 27
,然后再次进入循环。deck
中删除第一个元素。k
(将其设置为26)。deck.size()
。26 < 26
不为true,因此它会跳转到循环的结尾,即使仍剩下26个元素deck
。答案 1 :(得分:2)
在阅读k
时删除元素,减小尺寸,达到平衡尺度的一半。
while循环应该是:
while(deck.size()>0)
deck.remove(0);
答案 2 :(得分:2)
问题是你在每次迭代中甲板的大小减小时你递增k,所以k和deck.size()会#34;遇到&#34;中途,所以26岁。
您只需执行此操作即可解决此问题:
public void remove()
{
int k = deck.size();
while(k != 0)
{
deck.remove(0);
k--;
}
}
答案 3 :(得分:1)
你不必重新发明轮子。要从列表中删除所有元素,只需调用:
deck.clear();
这将删除列表中的所有元素。