Java – Zufallszahlen für bestimmte Zahlen ohne Duplizierung dieser Zahlen generieren – wie?

Klingt einfach genug … aber ich habe mich damit auseinander gesetzt und versucht, die eine und die ganze Lösung zu finden.

Für einen Bereich von Zahlen, sagen wir 1-12 , möchte ich eine zufällige Sequenz innerhalb dieses Bereichs erzeugen, einschließlich 1 und 12 .

Ich möchte jedoch keine doppelten Nummern .

Also würde ich so etwas wollen – 3,1,8,6,5,4 ..und so weiter, jede Zahl von 1-12.

Dann möchte ich diese Zufallszahlen in ein Array und dieses Array verwenden, um einige Elemente (wie Inventar aus der database) auf einer JSP-Seite “zufällig” auszuwählen und anzuzeigen.

Das Problem mit dem, was ich bisher versucht habe, ist, dass viele doppelte Zahlen erzeugt werden … oder nicht ALLE Nummern gewählt werden.

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


Bearbeiten

Test # 1 mit Collections und shuffle() Methode –

 ArrayList list = new ArrayList(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]+"
"); }

Das Ergebnis war eine Sequenz mit doppelten Werten –
Wählen Sie = 3
Wählen Sie = 8
Wählen Sie = 7
Wählen Sie = 5
Wählen Sie = 1
Wählen Sie = 4
wähle = 6
Wählen Sie = 4
Wählen Sie = 7
wähle = 12

Test # 2 – mit zufälliger Mathematikklasse

 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+"
"); }

Das Ergebnis war genauso wie mit Collections.shuffle() .

Sie können ein Array mit allen Werten von 1 bis 12 füllen und dann mischen (siehe z. B. Warum funktioniert Collections.shuffle () für mein Array nicht? )

Sie können alle Zahlen von 1 bis 12 der Reihe nach in ein Array setzen und dann einen Mischalgorithmus verwenden, um die Reihenfolge von ihnen zu randomisieren, z. B. http://www.leepoint.net/notes-java/algorithms/random/random-shuffling.html .

Die Zufallszahlengenerierung ermöglicht Doppelungen. Wenn Sie eine Reihe von Zufallszahlen ohne Duplizierung wünschen, schlage ich Folgendes vor:

  1. Generiere eine Zufallszahl (ich beziehe mich auf eine ZahlX).
  2. Zu einem Set-Objekt hinzufügen.
  3. Überprüfen Sie die Größe des Set-Objekts, wenn es die gewünschte Größe ist, sind Sie fertig. Wenn es kleiner als die gewünschte Größe ist, gehen Sie zu Schritt 1

Wenn Sie MySQL oder SQLLite als Ihre database verwenden, können Sie diese Randomisierung auf der SELECT-Abfrageebene durchführen, indem Sie ORDER BY RAND () für die Beschränkung auf 1-12 verwenden, indem Sie WHERE ID> = 1 UND ID < = 12 ORDER angeben DURCH RAND ()

Sie könnten einfach alle gewünschten Zahlen in eine Liste einfügen und dann die Liste nach dem Zufallsprinzip sortieren und dann die zufällig angeordnete Liste in ein Array konvertieren, z

 List list = new ArrayList(); for (int i = 1; i < = 12; i++) { list.add(i); } Collections.sort(list, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return Math.random() > 0.5 ? 1 : -1; } ); Integer[] array = list.toArray(new Integer[list.size()]);