有人可以向我解释为什么这是一个无限循环?

ken*_*ken -2 c# list unity-game-engine

有人可以向我解释为什么这是一个无限循环?当我尝试这个时,团结就会挂起.我试图建立一副52张牌

    public class Deck {
        private List<Card> deckList = new List<Card>();

        public Deck() {
            for (int i = 0; i<52; i++) {
                System.Random rnd = new System.Random();
                Card newCard = new Card(rnd.Next(1,13), rnd.Next(1,4));
                if (!deckList.Contains(newCard) || i == 0) {
                    deckList.Add(newCard);
                } else { i--; }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bra*_*NET 6

你正在Random紧缩循环中重新创建.每次使用相同的种子值,因此每次都会生成相同的.如果卡片已经存在于卡片组中,则递减循环变量,因此它会"永久"旋转.实际上,如果种子最终改变了,你就可以了.

你的代码应该是:

       System.Random rnd = new System.Random();
       for (int i = 0; i<52; i++) {
            Card newCard = new Card(rnd.Next(1,14), rnd.Next(1,5));
            if (!deckList.Contains(newCard) || i == 0) {
                deckList.Add(newCard);
            } else { i--; }
        }
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个非常奇怪的循环.我会用一个while循环检查是否有任何卡片或其他东西.无论如何,不​​要Random像这样在紧密循环中实例化.

更好的是,只需创建所有卡并将其随机播放.

我错过了评论中提到的另一个更改,您需要使用rnd.Next(1,14)rnd.Next(1,5)确保每张卡都是实际生成的.否则就没有办法了.请记住,rnd.Next最大值是独家的.