从一个数组中取出组元素并将它们随机放在另一个数组中

时间:2015-10-09 17:43:12

标签: java arrays random

我有两个数组,都是String类型,但是一个是null

String[] records = {"10", "2", "John", "Chris", "1", "Peter", "3", "Bob", "George", "Paul"};

String[] seating = (Integer.parseInt(records[0])); //Size of the array is the 0 index of the records.

我能够在记录数组上获取索引位置和组大小,例如索引1,我可以使用Integer.parseInt(records [1])来获取大小并使用它也可以找到下一个的索引基。

我的问题是:我如何将组随机放入新阵列&我如何确定何时放置它而不会在我的脸上抛出数组索引超出范围的异常。不覆盖先前放置的组。我能够在每次迭代时生成随机数(每次迭代放置一个组)。我还有一个方法,它采用索引和数组以及生成的随机数,将它放在新数组中。

每次运行程序时,都会随机放置组。例如,我的输出可能是(空白点包含“-empty - ”)。

Spot 1: -empty-
Spot 2: Bob
Spot 3: George
Spot 4: Paul
Spot 5: -empty-
Spot 6: John
Spot 7: Chris
Spot 8: -empty-
Spot 9: Peter
Spot 10: -empty-

2 个答案:

答案 0 :(得分:1)

在我看来,你只是在使用错误的数据类型,这会让你的生活变得更加复杂。您可以拥有:

,而不是带有代码来指示组大小的String数组
String[][] records = {{"John", "Chris"}, {"Peter"}, {"Bob", "George", "Paul"}};

更好的方法是使用ArrayList<String[]>ArrayList<List<String>>,因为那样你就可以Collections.shuffle(records);

答案 1 :(得分:0)

有很多方法可以做到这一点,但都依赖于类似的概念,只是&#34;隐藏&#34;他们不同。

  1. 您随机选择一个您之前未从源数组中选取的元素,然后按顺序将其放置在目标中的下一个位置。当您到达目标数组的末尾/处理了足够的元素时,您就完成了。如有必要,您可以重复生成随机数,直到有人登上您没有选择的元素。你怎么知道你是否已经选好了?你必须有办法认识到这一点。例如,如果您知道自己不会有空值,则可以在选择源数组元素时使用null覆盖它。如果你登陆null,你知道你需要另一个随机数。另一种方法是拥有一个单独的标志数组。
  2. 您从源数组中随机选择一个元素并将其放在目标中。然后,将其从源数组中移除,并将元素向前移动一个位置。重复直到到达目的地的末尾(处理正确的元素数)。
    1. 按顺序将源元素复制到目标中。然后生成随机索引对并在这些索引处切换值的位置。把它想象成洗牌。根据您的需要重复,但不得少于N / 2,其中N是数组大小。你可以疯狂地选择两个位置进行交换。 ...