Generieren mehrerer Zufallszahlen

8

Ich möchte 25 eindeutige Zufallszahlen generieren und sie in einer Konsole auflisten. Die Nummern sollten mindestens 10 Zeichen lang sein. Eine einfache Möglichkeit, das zu tun?

    
Jasl 31.05.2010, 09:08
quelle

5 Antworten

13

Versuchen Sie, die Zahlen als Strings aufzubauen, und verwenden Sie einen HashSet, um sicherzustellen, dass sie eindeutig sind:

%Vor%

Beispielausgabe:

%Vor%

Die Klasse HashSet ist in .NET 3.5 und neuer enthalten.

>     
Mark Byers 31.05.2010, 09:16
quelle
2

Das Problem liegt ein wenig in "25 unique random". Die Anzeige von 25 Zufallszahlen ist so einfach wie

%Vor%

Diese sind jedoch nicht unbedingt einzigartig. Wenn Sie keine Duplikate zulassen möchten, müssen Sie zuvor generierte Zahlen irgendwie speichern und erneut rollen, wenn Sie eine alte treffen.

Beachten Sie, dass Sie auf diese Weise die Wahrscheinlichkeitsverteilung Ihrer generierten Zahlen ändern.

Bearbeiten: Ich habe gerade bemerkt, dass diese Zahlen zehn Zeichen lang sein sollten. Da 9.999.999.999 Int32.MaxValue überschreitet, würde ich vorschlagen, Math.Floor(r.NextDouble() * 10000000000 + 1000000000) anstelle von r.Next(1,100) zu verwenden.

Da Ihre Zahlen so lang sind, sollten Sie sich keine Gedanken über Duplikate machen. Sie sind sehr, sehr unwahrscheinlich.

    
Jens 31.05.2010 09:11
quelle
1

Es gibt einen großen Unterschied zwischen Zufälligkeit und Einzigartigkeit.

Wenn Sie also wirklich eindeutige Nummern benötigen, müssen Sie sicherstellen, dass Sie alle bereits erstellten Nummern speichern und prüfen, ob sich Ihr neu erstelltes nicht in dieser Liste befindet oder Sie einen Algorithmus bereitstellen müssen Dadurch wird sichergestellt, dass eine bestimmte Nummer nicht zweimal erstellt werden kann.

Damit der zweite Teil funktioniert, nehmen Sie meistens das Datum / die Uhrzeit des Erstellungsmoments, weil das aktuelle Datum / Uhrzeit-Paar für immer einzigartig ist. Das einzige Problem ist, wie viele Kreationen pro (Millisekunden) Sekunde Sie haben und wie viele Ziffern verfügbar sind, um Ihre eindeutige Nummer zu speichern.

Ein Beispiel über die Verwendung von 12 Ziffern wird hier gemacht . Hoffe, das hilft.

    
Oliver 31.05.2010 09:35
quelle
0

Ein einfacher Weg ist das:

%Vor%

Damit stellen Sie sicher, dass die Nummern immer 10 Zeichen (Ziffern) lang sind. Sie werden jedoch nicht unbedingt einzigartig sein. Wenn Sie möchten, dass sie eindeutig sind, müssen Sie Folgendes tun:

%Vor%

Wenn Sie mehr als zehn Ziffern haben möchten, erzeugen Sie die Anzahl der Ziffern zufällig zwischen 10 und Ihrer maximalen Anzahl an Ziffern. Dann generieren Sie jede Ziffer (oder Gruppe von Ziffern) zufällig in einem StringBuilder oder < a href="http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx"> Liste . Sie können dieselbe HashSet -Methode verwenden, die ich oben verwendet habe, um die Eindeutigkeit sicherzustellen.

    
IVlad 31.05.2010 09:22
quelle
-2
%Vor%     
Preet Sangha 31.05.2010 09:13
quelle

Tags und Links