Ich habe ein JavaScript-Buch gekauft und arbeite mich durch. Ich habe einen Teil des Buches erreicht, der keinen Sinn ergibt. Ich hoffe, dass ihr Jungs und Mädels klären könnt, wie es das Buch nicht tut.Ein Array mit zufälligen Ganzzahlwerten füllen
Bitte beachten Sie den folgenden Code, der 6 Zufallszahlen erzeugt und sie zu einem Div mit id=panel
rendert.
function init(){
var panel = document.getElementById('panel');
var i, rand, temp, str, num = [];
for (i = 1; i < 50; i ++){
num[i] = i;
}
for (i = 1; i < 50; i ++){
rand = Math.ceil(Math.random()*49);
temp = num[i];
num[i] = num[rand];
num[rand] = temp;
}
str = 'Your six lucky numbers:<br>';
for (i = 1; i < 7; i ++){
str += num[i];
if (i !==6){str += ' - ';}
}
panel.innerHTML += str;
}
document.addEventListener('DOMContentLoaded', init, false);
Das Buch sagt, daß die zweite Schleife (das initilizes die Zufallsvariable) einen Sortieralgorithmus enthält, die keine zwei Elemente enthalten, die gleiche Anzahl gewährleistet.
Ich bin mir nicht sicher, wie das möglich ist, ich sehe keinen Code darin, der rand
stoppt, der eine doppelte Zahl enthält und infolgedessen diesen Wert in num
gespeichert hat. Das Buch liefert nicht wirklich eine Erklärung für das, was vor sich geht.
Könnte mir bitte jemand sagen, wie, wenn überhaupt, Schleife zwei verhindert, dass "num" die gleiche Nummer enthält?
Vielen Dank alle
P.S. Entschuldigung, wenn diese Frage nicht den Stack Overflow-Richtlinien entspricht. Ich komme nicht oft hierher, nur wenn ich wirklich feststecke und anderswo keine Antwort finde.
Vielen Dank für die Erklärung. Ich musste es genau so durchgehen, wie du es gerade verstanden hast, aber ich war mir nicht sicher, ob ich recht hatte. Was ist zu verhindern, dass 'Math.random()' die gleiche Nummer zweimal erzeugt? – Pete
Es gibt nicht, aber lassen Sie uns sagen, zufällige erzeugt 32 sowohl auf der dritten als auch der 15. Iteration. Es wird den 32. und den 3. Wert tauschen, also num [32] = 3 und num [3] = 32 nach dem Wechsel. Jetzt, in der 15. Iteration, wird num [15] mit num [32] ausgetauscht, aber num [32] enthält nun 3, also num [15] = 3 und num [32] = 15 nach dem swop. Es spielt also keine Rolle, ob es mehr als einmal einen zufälligen Wert erzeugt. –
vielen Dank!Ich konnte nicht für das Leben von mir das herausfinden. Ich verstand, was das Programm machte, nur nicht die Wirkung, die es verursachen würde. Nochmals vielen Dank für die Panne, genau das, was ich brauchte. +1: D – Pete