我正在为学校作业编程卡片和甲板课程,而且我的改组方法并没有始终如一地传递测试代码。我们应该专门使用在线资源而不是分级器/讲师支持这个,我很快找到了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;
}
}
答案 0 :(得分:0)
你真的很亲近。我建议改变这个:
i = (int) (Math.random() * (cardNum-1));
对此:
i = (int) (Math.random() * (cardNum - i) + i);
或者使用ThreadLocalRandom.current().nextInt(origin, bound)
(假设你是1.7或更高)。