我在理解如何重组数组的逻辑时遇到问题。如果有人可以一步一步解释,那将非常有帮助。
//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的变量上,并将为Integer。
System.out.println(index);
这只是覆盖了您的随机数。
int temp = deck[i];
是一个临时变量。它将来自数组的值保存在位置i。
deck[i] = deck[index];
将卡座中位置i的值设置为位置索引中卡座中的值。
deck[index] = temp;
该温度将存储在卡座中的pos索引处。
希望逐步帮助您>