洗牌数组背后的逻辑是如何工作的?
How does the logic behind shuffling an array work?
我在理解数组打乱顺序背后的逻辑时遇到了问题。如果有人可以逐步解释那将非常有帮助。
//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;
}
循环一次遍历牌组一张牌,并将该牌与牌组中随机选择的牌交换。循环后每张卡片至少被交换一次。
它只是将当前索引处的卡片与随机生成的索引处的卡片交换。生成的索引将介于 0
和 deck.length-1
之间。
虽然索引 i
可能等于随机生成的索引,但它并不是完美的随机播放。或者他们可以稍后撤销之前交换的卡。
有关 shuffling
的更多信息,您可能还想查看有关 Fisher-Yates Shuffle algorithm 的这篇文章。
让我们一步一步来
for(int i = 0; i < deck.length; i++)
For 循环,将遍历您的套牌。下面的代码将根据甲板的大小被调用。
//Generate an index randomly
int index = (int)(Math.random() * deck.length);
评论已经说过了,它会生成一个随机数并将其乘以甲板长度。将保存在名为 index 的变量中,并且将是一个整数。
System.out.println(index);
这只是输出您的随机数。
int temp = deck[i];
是临时变量。它将数组中的值保存在位置 i.
deck[i] = deck[index];
将牌组中位置 i 的值设置为牌组中位置索引处的值。
deck[index] = temp;
温度将存储在 deck 中的 pos 索引处。
希望一步步对你有所帮助
我在理解数组打乱顺序背后的逻辑时遇到了问题。如果有人可以逐步解释那将非常有帮助。
//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;
}
循环一次遍历牌组一张牌,并将该牌与牌组中随机选择的牌交换。循环后每张卡片至少被交换一次。
它只是将当前索引处的卡片与随机生成的索引处的卡片交换。生成的索引将介于 0
和 deck.length-1
之间。
虽然索引 i
可能等于随机生成的索引,但它并不是完美的随机播放。或者他们可以稍后撤销之前交换的卡。
有关 shuffling
的更多信息,您可能还想查看有关 Fisher-Yates Shuffle algorithm 的这篇文章。
让我们一步一步来
for(int i = 0; i < deck.length; i++)
For 循环,将遍历您的套牌。下面的代码将根据甲板的大小被调用。
//Generate an index randomly
int index = (int)(Math.random() * deck.length);
评论已经说过了,它会生成一个随机数并将其乘以甲板长度。将保存在名为 index 的变量中,并且将是一个整数。
System.out.println(index);
这只是输出您的随机数。
int temp = deck[i];
是临时变量。它将数组中的值保存在位置 i.
deck[i] = deck[index];
将牌组中位置 i 的值设置为牌组中位置索引处的值。
deck[index] = temp;
温度将存储在 deck 中的 pos 索引处。
希望一步步对你有所帮助