Java随机分布

Java随机分布,java,random,distribution,Java,Random,Distribution,我有一个[36]长的对象数组。我必须在所有者之间随机分配这些对象,一个对象只能有一个所有者。用户可以设置2-5个所有者,如下所示: for(int i = 0; i < objectArray.length; i++){ int helper = shuffle1d[i]; objectArray[i].setObjectOwner(helper); } 2个所有者-14个对象/所有者-8个没有所有者的对象 3个所有者-10个/所有者-6个空 4个所有者-8/所有者-4个空

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

for(int i = 0; i < objectArray.length; i++){
   int helper = shuffle1d[i];
   objectArray[i].setObjectOwner(helper);
}
  • 2个所有者-14个对象/所有者-8个没有所有者的对象
  • 3个所有者-10个/所有者-6个空
  • 4个所有者-8/所有者-4个空
  • 5个所有者-6个/所有者-6个空

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

问题并不完全清楚您试图实现什么,但您可以使用
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);
参考文献:

问题已解决 首先,我创建了一个包含4个不同大小写的2d数组

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);
}
for(int i=0;i
不太清楚您想要完成什么,当然您可以比“没有工作”更具体一些?从您的描述中不清楚对象分配给所有者的情况。而且,你有什么问题还不清楚。请提供更详细的描述。我尝试用不同的措辞。