有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (4) 个答案

  1. # 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. # 2 楼答案

    移除元素,减小大小,同时重新使用k,这将在甲板大小的一半时达到平衡

    while循环应该是:

    while(deck.size()>0)
        deck.remove(0);
    
  3. # 3 楼答案

    问题是,在每次迭代中,当数据组的大小减小时,增加k,所以k和数据组。size()将在中途“相遇”,因此在26

    您只需执行以下操作即可解决此问题:

    public void remove()
    {
      int k = deck.size();
      while(k != 0)
      {
         deck.remove(0);
         k--;
      }   
    }
    
  4. # 4 楼答案

    你不必重新发明轮子。要从列表中删除所有元素,只需调用:

    deck.clear();
    

    这将从列表中删除所有元素