PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Hilfe bei Zufallszahlen in Javascript mit Arrays


Gast
2012-05-09, 11:40:38
Hallo,

ich hab hier eine Javascript-Aufgabe und komme da einfach an einem Punkt nicht weiter und hoffe jemand hat da einen Tipp für mich.
Es geht darum eine zufällige Zahlenreihe beliebiger Länge zu erzeugen, ohne dass eine Zahl doppelt in der Reihe vorkommt.

Bsp:
Zahlen 1-5: 1 3 2 4 5

Gemacht werden soll das mit Arrays ohne bei Doppelziehung einfach noch mal neu zu ziehen.

Mein Gedankengang ist bisher:

- Abfrage per prompt wie lang die Zahlenreihe seien darf

- Erstellen eines Arrays mit dieser länge, wobei er mit jeden Platz [i] des Arrays mit i+1 auffüllt. Dann habe ich bei Eingabe 5 "1 2 3 4 5" im Array.

- Erstellen eines weiteren Arrays mit nur einem Platz. Der Platz wird mit einer zufälligen ganzzahligen Zahl im Bereich der Eingabe gefüllt. Das klappt auch.

- Die zufällige Zahl zeigt also auf einen platz im ersten Array.

- Ich entnehme diesen Platz aus dem ersten Array und speichere ihn in einem letzten Array dessen Inhalt ich dann ausgebe.

Dadurch sollte nichts doppelt vorkommen können.

Mein Problem ist jetzt die Wiederholung der ganzen Sache in einer Schleife.
Wie baue ich eine Schleife, die immer wieder eine neue Zufallszahl erzeugt, das entsprechende Element rausfischt und in ein neues Array steckt? Und dabei berücksichtigt, dass das Ursprungsarray ja immer kleiner wird.
Das klappt irgendwie so gar nicht und ne richtige Idee hab ich auch nicht =/

Hat evtl. jemand ein kleines Beispiel oder einen Rat?

Gast
2012-05-09, 12:16:59
Das ist der Kram, den ich bisher fabriziert hab :<
Das Auskommentierte war eine Überlegung. Habs mal drin gelassen, vielleicht brauch ichs ja noch^^
Die einzelnen Alerts sind für mich momentan zur Überprüfung des Ergebnisses. Am Ende bau ich dann ein document.write ein, aber das ist erstmal nicht wichtig ^^


<html><head><title>Test</title>
</head><body>
<script type="text/javascript">

var Eingabe = window.prompt("Geben sie die höchste Zahl ein", "");

var Bereich = new Array();
for (var i = 0; i < Eingabe; i++) { Bereich[i] = i+1;
}
for (l=0; l<Eingabe;l++) {
var Zufall = new Array();
for (var j=0; j<1;j++) {Zufall[j] = (Math.floor((Math.random()*Eingabe)+1));
}

var enthalten = Bereich.join (" ");
alert (enthalten);

var zelle = Zufall.join (" ");
alert (zelle);

//for (var k = 1; k< Eingabe; k++) {
var gezogen = Bereich.slice(zelle-1,zelle);
alert (gezogen.join (" "));
//}
}
</script>
</body></html>

Gast
2012-05-09, 14:14:15
Bei deinem Code ist erstmal die Formatierung grausam. Dein JavaScript-Interpreter mag da kein Problem mit haben, ein menschlicher Leser dagegen schon. Ich hab das mal für dich (und andere Mitleser) verbessert:

<html><head><title>Test</title>
</head><body>
<script type="text/javascript">

var Eingabe = window.prompt("Geben sie die höchste Zahl ein", "");

var Bereich = new Array();
for (var i = 0; i < Eingabe; i++) {
Bereich[i] = i+1;
}
for (l=0; l<Eingabe;l++) {
var Zufall = new Array();
for (var j=0; j<1;j++) {
Zufall[j] = (Math.floor((Math.random()*Eingabe)+1));
}

var enthalten = Bereich.join (" ");
alert (enthalten);

var zelle = Zufall.join (" ");
alert (zelle);

//for (var k = 1; k< Eingabe; k++) {
var gezogen = Bereich.slice(zelle-1,zelle);
alert (gezogen.join (" "));
//}
}
</script>
</body></html>

RMC
2012-05-09, 19:56:18
Der Trick dabei ist es, den Index zufällig über die aktuelle Länge des Arrays zu bestimmen.

Pseudocode:


while (mArray.size() > 0)
{
int index = (int)(Math.random() * (mArray.size()));

print(mArray[index]);

mArray.remove(index);
}

Trap
2012-05-09, 20:38:42
Array mit den Zahlen füllen und dann
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle benutzen.