以下代码在游戏中随机播放扑克牌。我必须解释代码在演示文稿中的作用。我是Java编码的新手,所以任何人都可以逐行向我解释以下代码:
// Deck shuffling method
public void shuffleDeck() {
//Seed the Random instance with nanoTime
Random random = new Random(System.nanoTime());
for(int i = 0; i < 52; i++) {
int swapIndex = random.nextInt(52);
if (swapIndex != i) {
PlayingCard temp = cardDeckArray[i];
cardDeckArray[i] = cardDeckArray[swapIndex];
cardDeckArray[swapIndex] = temp;
}
}
cardIndex = 0; //Next card to be pulled off the deck
}
答案 0 :(得分:3)
这是一个 shlole of a deck ,在每次迭代中你随机交换两张牌,这将导致牌组的一些随机排列。
然而,这个算法存在缺陷和偏见,有些排列比其他更容易生成,要使用无偏差的shuffle,你应该使用fisher-yates shuffle(这是基本相同的想法,但在i
到52
之间生成一个随机数,而不是0
到52
之间的随机数
在线程What distribution do you get from this broken random shuffle?
中详细讨论了这种偏见的原因和结果