【发布时间】:2019-10-16 17:16:27
【问题描述】:
我在理解数组如何洗牌背后的逻辑时遇到了问题。如果有人可以逐步解释,那将非常有帮助。
//Shuffle the cards
for(int i = 0; i < deck.length; i++) {
//Generate an index randomly
int index = (int)(Math.random() * deck.length);
System.out.println(index);
int temp = deck[i];
deck[i] = deck[index];
deck[index] = temp;
}
【问题讨论】:
-
它生成一个具有数组长度上限的随机数,并将当前元素与该索引处的元素交换。不过
int index = randomInstance.nextInt(deck.length)会更好用。 -
这是一个Fisher-Yates shuffle。
-
@avi 我不相信这是费舍尔-耶茨洗牌,因为之前的牌可能最终会回到他们之前的位置,而费舍尔-耶茨的情况并非如此。
-
@WJS 啊,你是对的;很好的收获。