Java - generiert Zufällige Auswahl von bestimmten zahlen, ohne überschneidungen mit den genannten zahlen - aber wie?

Klingt einfach genug...aber ich habe schon einstecken sich an diesem, versuchen zu finden, das ein und alles Lösung.

Für eine Reihe von zahlen auf, sagen Sie 1-12, ich will zum generieren einer zufälligen Reihenfolge innerhalb dieses Bereichs, und gehören 1 und 12.

ich will nicht doppelte zahlen, obwohl.

Also ich würde mir wünschen, so etwas wie dieses - 3,1,8,6,5,4 ..und so weiter, jede Zahl von 1-12.

Dann ich möchte diese Zufallszahlen in eine Array und verwenden, array, 'zufällig' wählen und zeigen Sie einige Gegenstände (wie Inventar gezogen aus der Datenbank) auf einer jsp-Seite.

Das problem mit dem, was ich habe versucht, so weit, ist, dass es eine Menge von duplizieren zahlen generiert werden...oder, nicht ALLE von den zahlen ausgewählt werden.

Gibt es eine einfache Lösung für dieses problem?


Bearbeiten

Test#1 mit Collections und shuffle() Methode -

ArrayList<Integer> list = new ArrayList<Integer>(10);
for(int i = 0; i < 10; i++)
{
  list.add(i);
}
Collections.shuffle(list);

String[] randomNumbers = (String[])list.toArray();

for(int i = 0; i < 10; i++)
{
  out.print(randomNumbers[i]+"<br>");
}

Das Ergebnis war eine Sequenz mit den doppelten Werten -
wählte = 3
wählte = 8
wählte = 7
wählte = 5
wählte = 1
wählte = 4
wählte = 6
wählte = 4
wählte = 7
wählte = 12

Test #2 - mit Random Klasse math

int max = 12;
int min = 1;

int randomNumber = 0;

String str_randomNumber = "";

for(int i=0; i<10; i++) {
    //int choice = 1 + Math.abs(rand.nextInt(11));
    int choice = min + (int)(Math.random() * ((max - min) + 1));

    out.print("chose = "+choice+"<br>");
}

Das Ergebnis war nur, wie mit Collections.shuffle().

da ist die range 1-12, kann man erwarten, ein paar Duplikate. Pflege zu zeigen, wie Sie uns zufällig?
bearbeitet die post, um einige der code, den ich versucht habe
wie ich schon sagte 1-12 ist eine sehr geringe Reichweite und es werden Duplikate zu löschen. was Sie tun können, ist zu überprüfen, um zu sehen, ob die nächste Zufallszahl, die bereits generiert und wenn das so ist, verwerfen Sie es und gehen Sie zum generieren wieder, bis es alle getan.
Die version Test#1 funktioniert bei mir einwandfrei (nach Austausch String[] Object[]) und nicht Ertrag alle Duplikate.
Ihre test #1 hätte eine exception werfen, wenn Sie ausgeführt wird. Irgendwie verschluckt wurde, und Sie aufgewickelt immer noch an der alten Ausgabe. Laufen Sie diese in eine Art von web-app (ich beachte das "<br>"?) Es wäre viel besser zu laufen, nur direkt von der Befehlszeile aus.

InformationsquelleAutor katura | 2011-03-07

Schreibe einen Kommentar