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

时间:2019-04-25 21:55:18

标签: c# list random while-loop

当前正在为纸牌游戏战争的Windows窗体版本编写代码。我需要一种方法来随机整理列表以使卡片组随机化。我已经将eck和shuffledDeck的列表定义为字符串列表。

当我运行createDeck()时,我将其输出到Windows窗体的文本框中,以确保它正确地创建了列表。我还进行了测试,以确保deck.Count()等于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就会冻结,我不得​​不强制退出该程序以退出。

1 个答案:

答案 0 :(得分:2)

content使shuffledDeck = deck;shuffledDeck成为对同一对象的引用。因此,在while循环内,您要删除“卡片”并将其添加到同一卡片组和条件卡片组。Count> 0始终为真。

尝试使用此对象克隆器:Deep cloning objects

然后将deck替换为shuffledDeck = deck;