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

问题描述 投票:-1回答:1

目前正致力于为Windows游戏大战的Windows Forms版本编写代码。我需要一种方法来重新排列列表来随机化甲板。我已经将deck和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会冻结,我必须强制退出程序退出。

c# list random while-loop
1个回答
2
投票

线shuffledDeck = deck;使shuffledDeckdeck成为同一个对象的引用。所以在你的while循环中,你正在移除并添加“卡片”到同一个套牌和条件套牌.Count> 0将永远为真。

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

并用shuffledDeck = deck;取代shuffledDeck = deck.Clone();

© www.soinside.com 2019 - 2024. All rights reserved.