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()
.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie füllen ein array mit allen Werten von 1 bis 12 und dann mischen Sie (siehe z.B. Warum tut Sammlungen.shuffle() scheitern, für mein array?)
Ändern von String [], um Ojbect[] in meinem test-snippet ergab die Ergebnisse, die ich wollte.
irgendein Grund steckt dahinter?
InformationsquelleAutor Howard
Können Sie alle zahlen von 1 bis 12 in der Reihenfolge in ein array und verwenden Sie dann einige mischalgorithmus zu randomisieren der Reihenfolge der Ihnen z.B. http://www.leepoint.net/notes-java/algorithms/random/random-shuffling.html.
InformationsquelleAutor Andrey Adamovich
Random number generation sorgt für Vervielfältigungen. Wenn Sie möchten, eine Reihe von Zufallszahlen ohne Duplikate, schlage ich die folgenden:
InformationsquelleAutor DwB
Wenn Sie mit MySQL oder SQLLite-Datenbank, die Sie tun können diese Randomisierung bei der SELECT-Abfrage Ebene durch die Verwendung von ORDER BY RAND() für die Beschränkung auf 1-12 Sie können eine where-Klausel WHERE ID >=1 UND ID <=12 ORDER BY RAND()
InformationsquelleAutor guru
Dies ist eine utility-Methode zum erstellen eine zufällige Integer-Zahl :
Dies ist ein Algorithmus, der immer erzeugt eine einzigartige Reihe von zahlen:
Und hier ist der test-code:
InformationsquelleAutor Mehdi
Könnte man einfach alle zahlen, die Sie möchten, in einer Liste und dann bestellen Sie die Liste nach dem Zufallsprinzip und dann konvertieren Sie das zufällig geordnete Liste in ein array, z.B.
bourrillion warum? können Sie uns Ihre Gründe mit, die Ihre Quellen bitte?
Es ist wirklich nicht selbstverständlich, dass es besser ist, rufen Sie einfach
shuffle
statt zu schreiben, dass alle code?InformationsquelleAutor brent777