有人可以指导我完成这个逻辑错误吗?

时间:2015-01-19 21:21:34

标签: java

我正在尝试删除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。

4 个答案:

答案 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)。
  • 然后调用返回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();

这将删除列表中的所有元素。