wie kann man in JavaScript eine Funktion erstellen, die eine zufällige Zahl generiert?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das Shuffle von EinAlexander ist schon mal ein Blick in die richtige Richtung.

Wie Du bereits bemerkt hast ist eine Fifty-Fifty Umsortieren nicht zufällig genug.

Wenn es um das Mischen einer endlichen Anzahl von Elementen geht , dürfte die Fisher-Yates-Permutation für ausreichende Zufälligkeit garantieren.

Hier noch Beispiele für die Umsetzung in Javascript:

Ich hatte nach der Gassirunde etwas Zeit um 2 kleine Demos zu schreiben:

shuffle FY.html

<!DOCTYPE html>
<html>
<body>
<h2>Mische zufällig</h2>
<p id="demo"></p>


<script>
maxNumbers=49
myShuffle=Array.from({length: maxNumbers}, (_, i) => i + 1)
LastIndex = myShuffle.length;
 //mischen nach Fisher-Yates
while (--LastIndex > 0) {
  randIndex = Math.floor(Math.random() * (LastIndex + 1));
  [myShuffle[randIndex], myShuffle[LastIndex]] = [myShuffle[LastIndex], myShuffle[randIndex]];
}
  //zu einem String zusammenfügen
document.getElementById("demo").innerHTML = myShuffle.join(' ');
</script>
</body>
</html>

6aus49.html

<!DOCTYPE html>
<html>
<body>


<h2>Lottozahlen</h2>


<p id="LottoZahlen"></p>
<p id="Rest"></p>


<script>
maxNumbers=49
AlleZahlen=Array.from({length: maxNumbers}, (_, i) => i + 1)
LastIndex = AlleZahlen.length


AnzahlLotto=6
MyLotto=[]
for (i=0;i<AnzahlLotto;++i ){
  randIndex = Math.floor(Math.random() * (LastIndex + 1));
  [AlleZahlen[randIndex], AlleZahlen[LastIndex]] = [AlleZahlen[LastIndex], AlleZahlen[randIndex]]; //gezogene zahl mit der am Ende tauschen
  MyLotto.push(AlleZahlen.pop()) //AlleZahlen.pop() entfernt das letzte (getauschte)Element und fügt es den gezogenen Zahlen (MyLotto.push) hinzu.
}
  //zu einem String zusammenfügen
document.getElementById("LottoZahlen").innerHTML = MyLotto.sort((a, b) => a - b).join(' ');
document.getElementById("Rest").innerHTML = 'Rest :'+ AlleZahlen.join(' ');
</script>


</body>
</html>


Erzesel  25.12.2022, 13:59

sorry ich hatte einen kleinen Denkfehler im letzten Script.

<html>
<body>


<h2>Lottozahlen</h2>
<p id="LottoZahlen"></p>
<p id="Rest"></p>




<script>
maxNumbers=49
AlleZahlen=Array.from({length: maxNumbers}, (_, i) => i + 1)
LastIndex = AlleZahlen.length-1
AnzahlLotto=6
MyLotto=[]
for (i=0;i<AnzahlLotto;++i ){
  randIndex = Math.floor(Math.random() * (LastIndex+1 ));
  [AlleZahlen[randIndex], AlleZahlen[LastIndex]] = [AlleZahlen[LastIndex], AlleZahlen[randIndex]];
  currentNum=AlleZahlen.pop()
  MyLotto.push(currentNum)
  LastIndex = AlleZahlen.length-1
}
  //zu einem String zusammenfügen
document.getElementById("LottoZahlen").innerHTML = MyLotto.join(' ');//.sort((a, b) => a - b)
document.getElementById("Rest").innerHTML = 'Rest :'+ AlleZahlen.join(' ');
</script>


</body>
</html>

...da ich LastIndex nicht aktualisiert hatte ginge einige Tauschoperationen ins Leere.

Nun klappts.

Das ganze hat zusätzlich den Vorteil, das mit jeder gezogenen Zahl auch der Rest der zahlen weiter durchmischt wird. (die Ursprünglch letzte Zahl erscheint an der zufälligen Position der letzten gezogenen Zahl)

0
Wie kann ich ich JavaScript eine Funktion erstellen, die jede Zahl zufällig von 1 bis 16 auswählt, jedoch darf keine mehrmals

hier das Prinzip


let numbers = [1, 2, 3, 4, 5, 6, 7, 8];

let shuffledNumbers = numbers.sort(function () {
  return Math.random() - 0.5;
});

console.log(shuffledNumbers);

Alex

Speichere die Zahlen 1 bis 16 als Paar mit Zufallszahlen von 0 bis 1 und sortier anschließend die Liste.

Woher ich das weiß:Berufserfahrung – Programmierer