2016-04-17 90 views
0

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

  • 2所有者 - 14对象/所有者 - 8对象而不所有者
  • 3所有者 - 10 /所有者 - 6个空
  • 4所有者 - 8 /所有者 - 4个空
  • 5所有者 - 6 /所有者 - 6空

我想在情况2中如何设置6个随机对象所有者为0(没有所有者)要求,例如,与10随机对象为每个所有者?

+0

这不是很清楚你要完成什么,你一定可以更具体的不是“没有工作”? – meriton

+0

根据您的描述,物体分配给所有者尚不清楚。另外,你遇到的任何问题都不清楚。请提供更详细的说明。 – pca

+0

我试图用不同的措词。 – Greg

回答

0

从问题中不完全清楚你想要完成什么,但是你可以用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); 

一个可能的结果是:

[1, 2, 0, 2, 2, 1, 1, 1, 2, 2, 2, 1, 0, 1, 1, 0, 0, 2, 1, 2, 2, 1, 0, 1, 0, 0, 2, 1, 2, 2, 1, 2, 1, 2, 0, 1] 

参考文献:

shuffle

0

问题迎刃而解 首先我创建其中包含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); 
}