Wie erstelle ich zwei verschiedene Zufallszahlen?

8

Ich muss zwei verschiedene Zufallszahlen erzeugen, sie können nicht gleich zueinander oder zu einer dritten Zahl sein. Ich habe versucht, jede Menge Möglichkeiten zu nutzen, aber es scheint, dass meine Algorithmen nicht so gut sind.

Kann mir jemand dabei helfen?

%Vor%

Dies ist, was ich bisher habe, der nächste Schritt wäre:

%Vor%

Ist mein Gedankengang richtig? Hinweis: Die erzeugten Zahlen müssen zwischen 0 und 3 liegen. Vielen Dank im Voraus.

    
Francisco Costa 21.08.2014, 10:58
quelle

8 Antworten

4

Sie können eine while Schleife ausführen, bis alle Zahlen unterschiedlich sind.

%Vor%

Hier ist das Jsfiddle mit dem obigen Code basierend auf dem Vorschlag von @ jfriend00 Ссылка .

Hier ist die originale Arbeitsdemo: Ссылка

    
Tasos K. 21.08.2014, 11:05
quelle
3

Sie können ein Array von zufälligen Möglichkeiten erstellen und dann Elemente aus diesem Array entfernen, wenn sie verwendet werden, indem Sie aus den verbleibenden Werten im Array zukünftige Zufallszahlen auswählen. Dadurch wird vermieden, dass bei der Suche nach einem Wert, der nicht mit den vorherigen Elementen übereinstimmt, eine Schleifenoperation durchgeführt wird.

%Vor%

Arbeitsdemo: Ссылка

Zu Ihrer Information: Diese Technik ist im Allgemeinen effizienter als das Schleifen, bis Sie etwas Neues erhalten, wenn Sie die meisten Zahlen innerhalb eines Bereichs zufällig auswählen, da dies nur die zuvor verwendeten Zahlen aus dem Zufallssatz eliminiert, so dass dies nicht notwendig ist rate immer und immer wieder, bis es einen unbenutzten Wert bekommt.

    
jfriend00 21.08.2014 11:07
quelle
2

Diese Version minimiert die Anzahl der Aufrufe an zufällige wie Sie, ist aber ein bisschen einfacher und nicht voreingenommen. In deiner Version gibt es eine 2/4-Chance, dass numberOne auf 0 geht, und eine 1/4-Chance auf 1 und 2. In meiner Version gibt es gleiche Chancen, dass numberOne als 0, 1 oder 2 endet / p> %Vor%

Es ist ein spezieller Fall der Array-Shuffling-Version deceze erwähnt, aber für wenn Sie nur zwei Zahlen haben

    
hugomg 21.08.2014 11:07
quelle
1

Ich bin mir nicht sicher, was Sie versuchen (oder tatsächlich, warum ist Ihr Code so kompliziert für das, was ich verstanden habe). Es ist vielleicht nicht der am besten optimierte Code aller Zeiten, aber hier ist mein Versuch:

%Vor%

EDIT: Verdammt, zu spät ^^

    
ChoiBedal 21.08.2014 11:06
quelle
1
%Vor%     
Greck 21.08.2014 12:12
quelle
0
%Vor%

Sie müssen n2 mit dem Minimum von n1 und n3 vergleichen, um sicherzustellen, dass Sie keine Gleichheit haben:

Angenommen n1=1 und n3=2 . Wenn Sie n2=1 erhalten und zuerst mit n3 vergleichen, werden Sie n2 im ersten Schritt nicht erhöhen. Im zweiten Schritt würden Sie es seit n2 >= n1 erhöhen. Am Ende n2 = 2 = n3 .

Dieser Algorithmus garantiert eine gleichmäßige Verteilung und Sie rufen nur zweimal Math.random() auf.

    
R2B2 21.08.2014 11:28
quelle
0

Beachten Sie, dass Aufrufe von Math.random() einen Fehler in Chrome wie angegeben hier , so ändern Sie alle der anderen Antworten durch Aufruf von safeRand() unten.:

%Vor%

Dies ist immer noch nicht ideal, aber reduziert die Korrelationen signifikant, wie jeder zusätzliche, verworfene Aufruf von Math.random() .

    
jimm101 21.08.2014 12:08
quelle
-1

Im Pseudocode tue ich im Allgemeinen:

%Vor%

Auf diese Weise erhalten Sie zwei verschiedene Zufallszahlen. Mit einer zusätzlichen Bedingung können Sie sie von einer anderen (dritten) Nummer unterscheiden.

    
Adriweb 21.08.2014 11:03
quelle

Tags und Links