# Elemente eines Vektors zufällig anordnen



## Murmler (25. Okt 2006)

Hallo zusammen,

um beim erzeugen eines Billardtisches die Kugeln immerwieder anders zulegen möchte ich diese per Zufall hinlegen.
Es gibt laut den Poolbillardregeln nur 2 Sachen die beachtet werden müssen. Zum einen muss die schwarze 8 in der Mitte des Dreiecks liegen und an den hinteren Ecken des Dreiecks muss eine halbe und eine volle Billardkugel liegen.
Hat jemand von euch einen kleinen Denkanstoss für mich wie ich das am besten lösen könnte?

Viel Grüsse

Der Murmler


----------



## André Uhres (25. Okt 2006)

Die Klasse java.util.Random erzeugt Zufallszahlen.
Du könntest dir eine Schleife anlegen mit der du festlegst, wieviele Zahlen du haben willst. 
Mit random.nextInt(bis) erzeugst du Zahlen zwischen 0 und "bis". 
Die untere Grenze könntest du mit einer entsprechenden "if"-Anweisung festlegen.
Eine mögliche Implementierung wäre z.B.:

```
private int[] erzeugeZufallszahlen(final int anzahl, final int von, final int bis ) {
        int[] zahlen = new int[anzahl] ;
        Random random = new Random(System.currentTimeMillis());
        for (int i=0; i < zahlen.length;) {
            int x = random.nextInt(bis);
            if(x >= von){
                zahlen[i++] = x;
            }
        }
        return zahlen;
    }
```


----------



## Guest (25. Okt 2006)

Erst einmal möchte ich Dir für deine Antwort Danken.
Ich habe mir in der Zwischenzeit auch etwas ausgedacht was soweit funktionieren tut.


```
tmpkugeln = kugeln;  // temporärer Speicher für die Kugeln
        zufall = new Vector();  // Vector in dem die Kugeln zufällig abgeegt werden
        
        // schwarze Kugel (die 8) aus der Menge nehmen da feste Position
        Kugel schwarzekugel = (Kugel)tmpkugeln.elementAt(7);
        tmpkugeln.remove(7); //löscht die Kugel aus der temporären Menge
        
        // halbe Kugel per Zufall aussuchen für einen Eckpunkt im Dreieck 
        int halb = Math.round((float)Math.random()*6 + 7);
        Kugel halbekugel = (Kugel)tmpkugeln.elementAt(halb);
        tmpkugeln.remove(halb);
        
        // volle Kugel per Zufall aussuchen für einen Eckpunkt im Dreieck
        int voll = Math.round((float)Math.random()*6);
        Kugel vollekugel = (Kugel)tmpkugeln.elementAt(voll);
        tmpkugeln.remove(voll);
        
        // alle anderen Kugel aus der Temporären Menge nehmen bis diese leer ist
        while(!tmpkugeln.isEmpty()){
            int z = Math.round((float)Math.random()*(tmpkugeln.size()-1));
            Kugel zekugel = (Kugel)tmpkugeln.elementAt(z);
            zufall.add(tmpkugeln.elementAt(z)); // die gewählte Kugel in den Zufallsvektor schieben
            tmpkugeln.remove(z); 
        }
        // schwarze Kugel in der Mitte hinzufügen
        zufall.insertElementAt(schwarzekugel,4);
        // die halbe und die volle Kugel in die beiden Ecken des Dreiecks einfügen
        if(Math.random() >= 0.5){
            zufall.insertElementAt(halbekugel,10);
            zufall.insertElementAt(vollekugel,14);
        }
        else {
            zufall.insertElementAt(vollekugel,10);
            zufall.insertElementAt(halbekugel,14);
        }
```

Viele Grüsse


----------

