任何人都可以向我解释以下Java代码吗?

时间:2015-03-02 09:22:00

标签: java arrays algorithm

以下代码在游戏中随机播放扑克牌。我必须解释代码在演示文稿中的作用。我是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
}

1 个答案:

答案 0 :(得分:3)

这是一个 shlole of a deck ,在每次迭代中你随机交换两张牌,这将导致牌组的一些随机排列。

然而,这个算法存在缺陷和偏见,有些排列比其他更容易生成,要使用无偏差的shuffle,你应该使用fisher-yates shuffle(这是基本相同的想法,但在i52之间生成一个随机数,而不是052之间的随机数

在线程What distribution do you get from this broken random shuffle?

中详细讨论了这种偏见的原因和结果