7. Lehre von unterschiedlichen Zufallszahlen

Einleitung

Der Sternenhimmelstuermer fand in einer Diskussion aus dem Jahr 2005 eine Menthode zur Erstellung von unterschiedlichen Zufallszahlen. Na ja, eigentlich ging es um die zufällige Verteilung von 16 Zahlen...im Jahr 2013 nimmt der Sternenhimmelstuermer die Diskussion wieder als Monolog  auf.

Mit ein paar kleinen Änderungen wird der Code zu einer Allzweckwaffe - egal ob  zur zufälligen Ziehung von Datenbanksätzen...Dazu gibt es eine ungefähre Erklärung, wie es der  Anfänger Sternenhimmelstuermer sich selbst erklärt - egal, hauptsache es funktioniert...

Inhaltsangabe
1. Kleine Demo mit Erklärung


1. Kleine Demo mit Erklärung

Wie immer am Anfang eine Demo - Es werden sechs Zufallszahlen gezogen und dann nach dem Trennstrich die zweite Zahl seperat aus dem neuen Array dargestellt.
Das macht es für Sie später einfacher das System zu begreifen...Welche Zahl das ist ? - das weiß leider nicht einmal der Sternenhimmelstuermer...

Quellcode der Demo

<html>
 <head>
  <meta name="generator" content="HTML Studio">
  <title>Zufallszahlen </title>
  <script language="JavaScript">
  var n = new Array();
var check = new Object();

while(n.length < 6)
{
    var random = Math.round(1 + 5* Math.random() );
    if( !check[random] )
        {
    n.push(random );
    check[random] = true;
    }
}
document.write (n);
    document.write (" | ");
    document.write (n[1]);

</script>
 </head>
 <body>
  </body>
</html>

Wir fangen bei der Definition eines Arrays und Objektes an. Bei Javascript müssen die Variablen erstmal definiert werden, also:

var n = new Array();
var check = new Object();

Bis hierhin ist es doch einfach.

Als nächstes wird eine While-Schleife geöffnet. Die wird so lange durchlaufen, bis unser Array mit sechs Objekten gefüllt wurde, die dann die Bezeichnungen n[0], n[1], n[2], n[3], n[4], n[5] einnehmen.  Den Inhalt wissen wir freilich noch nicht:

while(n.length < 6)
{


Dann geht es auch schon weiter mit einer Zufallszahl von 1 - 6, nämlich: var random = Math.round(1 + 5* Math.random() );

Es geht hier bei 1 los, weil der Sternenhimmelstuermer keine Null bei den gezogenen Zahlen haben will. Hier wird eine Zahl von 1-6 gezogen. Wieso denn das? Durch die 1 am Anfang verlieren wir die Null, aber dadurch wird gleichzeitig bei der fünf eine Zahl addiert, so dass bei jedem Schleifendurchlauf eine Zahl von 1-6 gezogen wird. Deshalb wurde die Variable random auch in die Schleife gelegt, damit bei jedem Durchlauf eine neue Zahl gezogen wird und die alte Variabel überschrieben werden.

if( !check[random] )
        {
    n.push(random );
    check[random] = true;
    }

So, in der ersten Klammer ( !check[random] ) steht erstmal eine Bedingung, der eine Anweisung folgt (siehe dazu auch diese Seite).

Die Bedingung ist, dass die existierenden Objekte in dem Array unterschiedlich sind. Beim ersten Durchlauf gibt es kein Objekt, beim zweiten wird es eins geben. Das wird hier Mal vorgezogen. Z. B. wird beim ersten Durchlauf eine Drei generiert. Diese Zahl kommt dann im folgenden in das Array. So, beim nächsten Durchlauf wird wieder durch Zufall eine drei gezogen, dann ist !check der Stopper, weil bereits ein Objekt mit einer Drei im Array existiert.

Aber wie kommt denn in unserem Beispiel die drei als Objekt mit der Nummer n[o] beim ersten Durchlauf ins Array?

{
    n.push(random );

Aha, der Push-Befehl füllt unser Array n mit der zuvor geprüften Zufallszahl, die ein Objekt vom Array ist.

check[random] = true;
    }

der eingegebene Wert muss auf true gesetzt werden. Richtig, wir müssen für eine true Prüfung die Zahl noch auf true setzen. Ab jetzt existiert erstmal ein Inhalt (Objekt) mit der Drei im eben konstruierten Beispiel. Dann geht die Schleife wieder von vorne los, bis eine unterschiedliche Zufallszahl entsteht, wenn die vorhanden ist gesellt Sie sich als weiteres Objekt in das Array - nehmen wir mal an, es ist eine 4. Dann haben wir n[0]=3 und n[1]=4 . Der Sternenhimmelstuermer hätte einen passenderen Namen wie virtual für das Array gewählt, um zu betonen, dass da im Hintergrund ein neues Array zusammengesetzt wird...


Wie gesagt, es werden sechs unterschiedliche Zahlen aus dem Raum 1-6 gezogen. Das ist nur für die Demo wichtig, um zu beweisen, dass nie eine Zahl doppelt gezogen wird und keine Null gezogen wird! Verstanden, Sie können genauso gut eine Lottoziehung durchführen, wenn Sie aus der roten folgenden Zahl var random = Math.round(1 + 5* Math.random() );   eine 48 machen und while(n.length < 6) so lassen wie es ist, da beim Lotto 6 Zahlen gezogen werden...

Sie sehen, wenn Sie ein wenig Verständnis entwickeln, sehen Sie in einem Code die Möglichkeiten...

Der Quellcode wurde noch nicht zu Ende erklärt - es fehlt noch die Ausgabe oder eben:

document.write (n);
    document.write (" | ");
    document.write (n[1]);

Das Array n wird in der ersten Codezeile komplett ausgegeben. In der nächsten Zeile wird nur für einen Trennungsstrich gesorgt. Alles mit dem Document.write()- Befehl in den Body des HTML-Dokumentes...

Aber was soll die dritte Zeile?

Das ist nur eine Demonstration. So lange der Browser bzw. die kleine Funktion werkelt, gibt es ein virtuelles Array n, dessen Zufallszahlen wieder mit n[0], n[1], n[2], n[3], n[4], n[5] angesprochen werden können.

Theoretisch wie praktisch hätten wir also auch 100 Zufallszahlen können und sechs davon sichtbar machen, in dem wir einfach n[50] oder n [irgendwelche andere] von den 100 Zufallszahlen. sichtbar machen.

Das ist natürlich relativ langweilig, aber genauso können Sie die Zufallszahlen natürlich benutzen, um in derselben Funktion oder in anderen Funktionen Bilder per Zufall aufzurufen...aus einer Datenbank in einem mehrdimensionalen Array, wo der Sternenhimmelstuermer dann eine for i - Schleife anwenden würde, um auf die n-Array zuzugreifen...

So können Sie einfache Diashows oder ? einfach selbst kreieren. In der nächsten Lektion wird der Sternenhimmelstuermer das auch ein wenig anspruchsvoller demonstrieren, aber die Lehre von verschiedenen Zufallszahlen ist eben ein Grundpfeiler für die "gehobene Programmierung".

Deshalb legt der Sternenhimmelstuermer eine öffentliche Bibliothek an.  Davon profitieren die User...

Ist schon komisch, der Sternenhimmelstuermer erfand für Batches eine Technik zur Ziehung von Lottozahlen, die in nachträglicher Betrachtung ziemlich dieser Technik ähnlich ist,  so dass der Sternenhimmelstuermer nach einer Technik suchte, mit der  man Variablen Zufallszahlen nach einer Prüfung zuordnet und dann  die Variablen ausgibt. Dann fand er den Lösungsansatz bei self-html und der Sternenhimmelstuermer entschloss sich seinen Variablenansatz zu gunsten des besseren Array-Ansatzes aufzugeben und den Code nur noch an wenigen Stellen anzupassen.

Bei einem intuitiven Programmierer ist der Weg entscheidend und nicht die Syntax. Deshalb ist der Sternenhimmelstuermer vielleicht ein Anfänger in Javascript, aber immer noch dank seines universalen Verständnisses von Subsprachen trotzdem noch ein einäugiger unter vielen Blinden...
Impressum
Datenschutz