2016-04-17 12 views
0

Ich habe eine Reihe von Objekten, die [36] lang ist. Ich muss diese Objekte zufällig zwischen Eigentümern verteilen, ein Objekt kann nur einen Eigentümer haben. 5 Eigentümer und es geht so - Der Benutzer kann 2 eingestellt:Java zufällige Verteilung

  • 2 Besitzer - 14 Object/owner - 8 Objekt ohne Besitzer
  • 3-Besitzer - 10/owner - 6 leer
  • 4 Inhaber - 8/Besitzer - 4 leer
  • 5 Besitzer - 6/Eigentümer - 6 leer

ich zum Beispiel im Fall fragen will 2, wie ich 6 zufällige Objekte Besitzer auf 0 gesetzt ist (ohne Besitzer) und 10 zufällige Objekte für jeden Besitzer?

+0

Es ist nicht ganz klar, was Sie versuchen zu erreichen, und sicher können Sie das konkretisieren als „nicht funktionieren“? – meriton

+0

Die Verteilung von Objekten an Besitzer ist aus Ihrer Beschreibung unklar. Auch, welches Problem Sie haben, ist nicht klar. Bitte geben Sie eine detailliertere Beschreibung an. – pca

+0

Ich habe versucht, es anders auszudrücken. – Greg

Antwort

0

Es ist nicht ganz klar aus der Frage, was Sie erreichen möchten, aber Sie können einige Mischen mit der Collections.shuffle() Funktion erreichen.

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); 

Ein mögliches Ergebnis:

[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] 

Referenzen:

shuffle

0

Problem gelöst Zuerst habe ich ein 2D-Array, das die 4 verschiedene Fall enthält

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}}; 

Dann in einer Methode kopiert ich die benötigte Zeile in ein neues Array basierend auf Benutzereingabe. Ich benutzte Fisher - Yates shuffle auf dem primitiven 1d Array und schleuderte die Objekte wo ich einen Setter Methor für jeden Besitzer nannte. sieht wie folgt aus:

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