Was ist der optimale Weg, um vier eindeutige Zufallszahlen von 0-9 zu erhalten? [Duplikat]

8

Ich möchte vier Zufallszahlen im Bereich von 0 bis 9 erzeugen. Es ist einfach, mit der Java Random-Klasse vier Zufallszahlen zu generieren.

%Vor%

Damit kann ich eine Reihe von vier Zahlen leicht erhalten, wie 9369 , 4702 usw. In diesem Fall kann es eine Möglichkeit geben, dass eine Nummer in vier Zahlen wiederholt wird, und ich möchte keine solche Wiederholung in Zahlen.

Hier möchte ich, dass alle vier Ziffern im obigen Array eindeutig sind, damit ich Ausgaben wie 9543 , 1234 usw. erhalten kann.

Dafür habe ich nachgedacht.

  1. Eine Zufallszahl generieren und als erste Nummer zuweisen.
  2. Generiere eine Zufallszahl und überprüfe mit der ersten Nummer, ob sie als zweite Nummer anders vergeben ist, sonst gib wieder Zufallszahl und wiederhole und so weiter.

Gibt es einen besseren Weg als die oben genannte Methode, so dass ich einfach und schnell vier eindeutige Zufallszahlen erhalten kann?

Jede Art von Vorschlag wird geschätzt.

    
Sagar Gautam 27.08.2017, 09:36
quelle

5 Antworten

31

Sie können Collections.shuffle :

verwenden %Vor%     
Eran 27.08.2017, 09:41
quelle
9

Sie können Set dafür verwenden, die Idee ist, Ihre Zufallszahl zu generieren und sie dann in einem Set zu platzieren, bis Sie 4 Elemente in Ihrem Set haben. Wenn Sie fertig sind, werden 4 eindeutige Zufallszahlen gespeichert dein Set

%Vor%     
Amer Qarabsa 27.08.2017 09:39
quelle
7

Wenn Sie eine schnelle Funktion f erstellen können, die die natürlichen Zahlen der Reihe von Zahlen zuordnet, die Ihre Anforderung erfüllen, können Sie nur eine Zufallszahl generieren. Ihre Laufzeit ist dann durch f begrenzt. Vorausgesetzt, Sie können ein einigermaßen schnelles f erstellen, ist dies der effizienteste Weg.

Die einfachste Lösung wäre, alle Zahlen, die Ihrem Kriterium entsprechen, in ein Array zu schreiben und eine Zufallszahl als Index in dieses Array zu erstellen. - & gt; O (1)

    
escitalopram 27.08.2017 09:43
quelle
7

Wie Sie sehen, gibt es viele Möglichkeiten, Ihr Ziel zu erreichen. Hier ist mein Vorschlag

%Vor%     
stefan bachert 27.08.2017 09:59
quelle
0

BEARBEITEN

  

Da Collections.shuffle auch den fisher-yates-Algorithmus verwendet. Aber diese Variante wählt den Startpunkt der Sequenz radomly.   Es ist, als würde man ein Kartenspiel mischen und 4 Karten aus der Mitte wählen, um ein Kartenspiel zu mischen und 4 von oben zu wählen.

Hier ist eine Variante des Fisher-Yeats Shuffling-Algorithmus, der hier erwähnt wird Ссылка

%Vor%

Referenz: Ссылка

    
mirmdasif 27.08.2017 10:13
quelle

Tags und Links