2016-04-17 13 views
0

私は[36]長いオブジェクトの配列を持っています。私はこれらのオブジェクトを所有者の間でランダムに分配しなければなりません。一つのオブジェクトは一つの所有者しか持てません。 5所有者と、このように書き - ユーザは、2を設定することができる:Javaランダム分布

  • 2オーナー - 14オブジェクト/所有者 - 所有者なしの8オブジェクト
  • 3所有者 - 10 /所有者 - 6つの空
  • 4所有者 - 8 /所有者 - 4つの空
  • 5所有者 - 6 /所有者 - 6空

iは0(所有者なし)、および10 6つのランダムオブジェクトの所有者を設定する方法ケース2の例を要求します各所有者のランダムなオブジェクト?

+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

問題が まず解決iは、4つの異なるケースが含まれている2次元配列を作成

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配列に使用し、各オーナーのセッターメーターと呼ばれるオブジェクトをループ投げた。 は次のようになります。

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