Generierung zufälliger ganzer Zahlen in JavaScript in einem bestimmten Bereich?
Wie kann ich zufällige ganze Zahlen zwischen zwei angegebenen Variablen in JavaScript generieren, z. B. "x = 4" und "y = 8" würde eine der Zahlen "4, 5, 6, 7, 8" ausgeben?
1823
3
Einige Beispiele finden Sie auf der Seite Mozilla Developer Network:
Here's the logic behind it. Es'ist eine einfache Regel der Drei:
Math.random()
gibt eineZahl
zwischen 0 (einschließlich) und 1 (ausschließlich) zurück. Wir haben also ein Intervall wie dieses:Nun möchten wir eine Zahl zwischen
min
(einschließlich) undmax
(ausschließlich):Wir können
Math.random
verwenden, um die entsprechende Zahl im Intervall [min, max] zu erhalten. Aber zuerst sollten wir das Problem ein wenig faktorisieren, indem wirmin
vom zweiten Intervall subtrahieren:Dies ergibt:
Wir können nun
Math.random
anwenden und dann den entsprechenden Wert berechnen. Wählen wir eine Zufallszahl:Um also
x
zu finden, müssten wir folgendes tun:Vergiss nicht,
min
wieder hinzuzufügen, so dass wir eine Zahl im Intervall [min, max] erhalten:Das war die erste Funktion aus MDN. Die zweite gibt eine ganze Zahl zwischen
min
undmax
zurück, beide inklusive.Um nun ganze Zahlen zu erhalten, könnte man
round
,ceil
oderfloor
verwenden.Man könnte
Math.round(Math.random() * (max - min)) + min" verwenden, dies ergibt jedoch eine ungleichmäßige Verteilung. Sowohl
minals auch
max` haben nur etwa die Hälfte der Chance zu würfeln:Schließt man
max
aus dem Intervall aus, so ist die Chance zu würfeln noch geringer als beimin
.Mit
Math.floor(Math.random() * (max - min +1)) + min
erhält man eine vollkommen gleichmäßige Verteilung.Du kannst
ceil()
und-1
in dieser Gleichung nicht verwenden, weilmax
jetzt eine etwas geringere Chance hatte zu würfeln, aber du kannst das (unerwünschte)min-1
Ergebnis auch würfeln.Verwendung:
Um diese Funktion und Variationen dieser Funktion zu testen, speichern Sie das folgende HTML/JavaScript in einer Datei und öffnen Sie es mit einem Browser. Der Code erzeugt einen Graphen, der die Verteilung von einer Million Funktionsaufrufen zeigt. Der Code zeichnet auch die Grenzfälle auf, d. h. wenn die Funktion einen Wert erzeugt, der größer als der Maximalwert oder kleiner als der Minimalwert ist, werden Sie darüber informiert.