无法弄清楚为什么我的while循环卡住了



目前正在为纸牌游戏战争的Windows Forms版本编写代码。 我需要一种方法来洗牌列表以随机化甲板。 我已经将 deck 和 shuffledDeck 的列表定义为字符串列表。

当我运行createDeck((时,我将其输出到窗口窗体中的文本框中,以确保它实际上正在正确创建列表。 我还对其进行了测试以确保甲板。计数(( 等于 52

private void shuffle()
        {
            createDeck();
            shuffledDeck = deck;
            Random r = new Random();
            int randomIndex = 0;
            while (deck.Count > 0)
            {
                randomIndex = r.Next(0, deck.Count);
                shuffledDeck.Add(deck[randomIndex]);
                deck.RemoveAt(randomIndex);
            }

这是我对甲板实际上是洗牌的测试。

            for (int a = 0; a <= 51; a++)
            {
                textBox1.Text += " " + shuffledDeck[a];
            }

我希望每次我都会看到一个洗牌的甲板,但是每当我运行它时,Visual Studio 都会冻结,我必须强制退出程序才能退出。

shuffledDeck = deck; shuffledDeckdeck引用同一对象。因此,在您的 while 循环中,您正在删除"牌"并将其添加到同一套牌和条件牌组中。计数> 0 将永远为真。

尝试使用此对象克隆器:深度克隆对象

并将shuffledDeck = deck;替换为shuffledDeck = deck.Clone();

最新更新