Java随机分发

时间:2016-04-17 00:43:58

标签: java random distribution

我有一个[36]长的对象数组。我必须在所有者之间随机分配这些对象,一个对象只能拥有一个所有者。用户可以设置2 - 5个所有者,它是这样的:

  • 2个所有者 - 14个对象/所有者 - 8个没有所有者的对象
  • 3个拥有者 - 10个/拥有者 - 6个空
  • 4位业主 - 8位/拥有者 - 4位空白
  • 5个拥有者 - 6个/拥有者 - 6个空

我想在例2中询问如何将6个随机对象所有者设置为0(没有所有者),并为每个所有者设置10个随机对象?

2 个答案:

答案 0 :(得分:0)

从问题中你想要完成的事情并不完全清楚,但你可以通过>>> df.groupby(['userid', 'grade','examid','subject']).sum().unstack('subject') numberofcorrectanswers numberofwronganswers subject Decimals Sentence Synonyms Whole Numbers Decimals Sentence Synonyms Whole Numbers userid grade examid 4 5 8 4 NaN NaN 6 10 NaN NaN 15 5 5 9 3 NaN NaN 5 1 NaN NaN 12 功能实现一些改组。

Collections.shuffle()

一个可能的结果:

int[] shuffle = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };

List<Integer> intList = new ArrayList<Integer>();

for (int i : shuffle) {
    intList.add(i);
}

Collections.shuffle(intList);

System.out.println(intList);

<强>参考文献:

shuffle

答案 1 :(得分:0)

解决了问题 首先,我创建了一个2d数组,其中包含4个不同的情况

public int[][] shuffle = {{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
                          { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
                          { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4},
                          { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5}};

然后在一个方法中,我根据用户输入将所需行复制到一个新数组。我在原始的1d数组上使用了Fisher-Yates shuffle并且循环抛出了对象,我为每个所有者称之为setter方法。 看起来像这样:

for(int i = 0; i < objectArray.length; i++){
   int helper = shuffle1d[i];
   objectArray[i].setObjectOwner(helper);
}