首页 > 解决方案 > 将对象列表划分为子列表而不创建其他对象

问题描述

我正试图在中断后摆脱编码锈迹,因此承担了创建简单纸牌游戏的任务。我知道我犯了一个菜鸟错误,但我似乎找不到解决方案。

我正在尝试实现一些概念性的洗牌方法,其中一种涉及将牌组清空到许多单独的堆栈中,然后再次重新编译到牌组中。

我的deck是一个标准List<T>。我的目标是从Cards中取出一张顶牌并将其添加到堆/堆叠中,从而将其从. 然后将最上面的卡片添加到堆/堆叠中,然后,直到没有更多卡片。然后我可以继续操作 3 堆并将它们添加回最后的甲板。[0]'temp_deck'xtemp_deckyztemp_deck

我的问题是,由于某种原因,它把每一堆都加card进去temp_deck了,所以每堆x, y, z都有 52 张牌。我该如何解决这个问题,以便将我的列表划分为这些堆而不是相乘?

这是我当前(第 n 次)尝试划分列表:

    public void Shuffle_b(Deck deck)
    {
        Deck temp_deck = deck;
        Deck x = new Deck();
        x.Cards.Clear();
        Deck y = x;
        Deck z = y;

        while (temp_deck.Cards.Count !=0)
        {

            if (temp_deck.Cards.Count != 0)
            {
                x.Cards.Add(temp_deck.Cards[0]);
                temp_deck.Cards.Remove(temp_deck.Cards[0]);

                if (temp_deck.Cards.Count != 0)
                {
                    y.Cards.Add(temp_deck.Cards[0]);
                    temp_deck.Cards.Remove(temp_deck.Cards[0]);

                    if (temp_deck.Cards.Count != 0)
                    {
                        z.Cards.Add(temp_deck.Cards[0]);
                        temp_deck.Cards.Remove(temp_deck.Cards[0]);
                    }
                }
            }
        }
   }

标签: c#

解决方案


您的问题是您将甲板 y 和 z 设置为指向您曾经创建的同一个对象 x。更改行:

    Deck y = x;
    Deck z = y;

    Deck y = new Deck();
    Deck z = new Deck();

您应该了解 x, y, z 是对对象的引用,并且当您分配 y = x 时,您将 y 指向 x 所指向的同一事物。


推荐阅读