缩小Fisher Yates shuffle和我之间的差距

时间:2018-04-25 19:11:31

标签: java arrays

我正在为学校作业编程卡片和甲板课程,而且我的改组方法并没有始终如一地传递测试代码。我们应该专门使用在线资源而不是分级器/讲师支持这个,我很快找到了Fisher Yates shuffle方法,但是我无法理解它的一些细节。我想结合我提出的一些内容,其中一些似乎非常相似。任何人都可以解释我错过了什么,它做了什么?这是我的方法:

public void shuffle() {
     /**
     * I'm trying an orginial idea for the shuffle method of taking the
     * element at each index and switching it out with another element
     * at a random index
     */
    Card placeHolder;
    int i;
    for (int c = 0; c < cardNum; c++) {
        i = (int) (Math.random() * (cardNum-1));
        placeHolder = deckList[i];
        deckList[i] = deckList[c];
        deckList[c] = placeHolder;
    }
}

1 个答案:

答案 0 :(得分:0)

你真的很亲近。我建议改变这个:

i = (int) (Math.random() * (cardNum-1));

对此:

i = (int) (Math.random() * (cardNum - i) + i);

或者使用ThreadLocalRandom.current().nextInt(origin, bound)(假设你是1.7或更高)。