Java 有人能引导我克服这个逻辑错误吗?
我试图删除arraylistJava 有人能引导我克服这个逻辑错误吗?,java,Java,我试图删除arraylistdeck中的所有元素,但出于某种原因deck.size()应该是52,返回26个元素,只删除了26个元素 public void remove() { int k = 0; while(k < deck.size()) { deck.remove(0); k++; } } public void remove() { int k=0; 而(k
deck
中的所有元素,但出于某种原因deck.size()
应该是52,返回26个元素,只删除了26个元素
public void remove()
{
int k = 0;
while(k < deck.size())
{
deck.remove(0);
k++;
}
}
public void remove()
{
int k=0;
而(k
我在
main
中调用了numberOfCards()
,它返回deck.size()
并返回52。因此,我不知道为什么remove only中的deck.size()
返回26。您删除元素,减小大小,同时重新使用k
,这在deck大小的一半时达到平衡
while循环应该是:
while(deck.size()>0)
deck.remove(0);
问题是,在每次迭代中,当数据组的大小减小时,增加k,因此k和deck.size()将在中途“相遇”,所以在26 您只需执行以下操作即可解决此问题:
public void remove()
{
int k = deck.size();
while(k != 0)
{
deck.remove(0);
k--;
}
}
因为计算机正在做你让它做的事情
- 首先,它将
设置为0李>k
- 然后调用
,返回52<代码>0<52,因此它进入循环deck.size()
- 然后它从
组中删除第一个元素
- 然后它增加
(将其设置为1)k
- 然后调用
,返回51<代码>1<51,因此它再次进入循环deck.size()
- 然后它从
组中删除第一个元素
- 然后它增加
(将其设置为2)k
- 然后调用
,返回50<代码>2<50,因此它再次进入循环deck.size()
- 然后它增加
(将其设置为25)k
- 然后调用
,返回27<代码>25<27,因此它再次进入循环deck.size()
- 然后它从
组中删除第一个元素
- 然后它增加
(将其设置为26)k
- 然后调用
,返回26deck.size()
为非真,因此它跳到循环的末尾,即使26<26
组中仍有26个元素
- 你不必重新发明轮子。要从列表中删除所有元素,只需调用:
deck.clear();
这将从列表中删除所有元素。甲板的元素是什么。请给我们看看卡片的类型。这是一个用户定义的类哇,我只是看看我的笔记,我已经记下来了。非常感谢你的帮助!您的解决方案很简单,但可以更简单。看我的answer@rtruszk,非常正确。我的答案也是无望的低效,因为每次删除时,所有元素都必须换到前面的一个位置:P然而,我只想指出他的逻辑错误;)