数组改组背后的逻辑如何工作?

问题描述 投票:-1回答:3

我在理解如何重组数组的逻辑时遇到问题。如果有人可以一步一步解释,那将非常有帮助。

//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;           
}
java arrays shuffle
3个回答
0
投票

循环一次在卡组中循环访问一张卡,并将该​​卡与卡组中随机选择的卡交换。循环之后,每张卡将至少交换一次。


0
投票

它只是将当前索引处的卡与随机生成的索引处的卡交换。生成的索引将介于0deck.length-1之间。

尽管这不是完美的随机播放,因为索引i可以等于随机生成的索引。或者他们以后可以撤消先前交换的卡。

有关shuffling的更多信息,您可能还想查看Fisher-Yates Shuffle algorithm上的本文。


0
投票

让它逐步进行

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索引处。

希望逐步帮助您>

© www.soinside.com 2019 - 2024. All rights reserved.