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)
你正在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最大值是独家的.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |