【问题标题】:Can anyone please explain to me the following Java code? [closed]任何人都可以向我解释以下Java代码吗? [关闭]
【发布时间】:2015-03-02 09:21:59
【问题描述】:

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

【问题讨论】:

  • 我投票决定重新开放。我不明白为什么它“太宽泛”了,我也明白新手程序员很容易被反复的交换弄糊涂。

标签: java arrays algorithm


【解决方案1】:

这是一副牌的洗牌,在每次迭代中你随机交换两张牌,这将导致牌的一些随机排列。

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

这种偏见的原因和结果在线程中进行了深入讨论:What distribution do you get from this broken random shuffle?

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多