Vb Zufallszahlen erzeugen

6 Antworten

Da ein Computer unter der gleichen Voraussetzung immer das Gleiche macht, ist er prinzipiell nicht geeignet, eine echte Zufallszahl zu erzeugen. Es gibt da verschiedene Tricks, um von außen den Computer zu beeinflussen. Wird je manueller Anforderung nur eine Zufallszahl benötigt (z.B. durch Tastendruck), so ist die Zeit zwischen zwei Tastenbetätigungen zufälligen Schwankungen unterworfen, die man ausnutzen kann. Man holt sich die aktuelle Zeit in der kleinsten Schrittweite (z.B. in Millisekunden) und dividiert diese Zahl durch die größte benötigte Zufallszahl, hier also 6. Der um eins erhöhte Rest der Division ist dann eine Zahl zwischen 1 und 6 und eine echte Zufallszahl. Man muss darauf achten, dass die angelieferte Zahl in Einerschritten durchlaufen wird. Wenn die letzte Stelle z.B. immer 0 ist, so ist der Rest beim Teilen immer gerade. Man kann die angelieferte Zahl noch aufbereiten, indem man sie durch eine Primzahl dividiert oder mathematisch umformt. Man kann auf diese Weise auch Lottozahlen generieren und die bereits gezogenen Zahlen berücksichtigen, indem man nacheinander durch 49, 48, 47 usw. dividiert.

Solltest du ernsthaft in VB.NET programmieren, dann ist die Random-Klasse das richtige für dich. (Vergiß also die die hier vorgeschlagene Rnd-Funktion.)

Die MSDN hilft dir dabei auf jeden Fall weiter. Dort steht alles beschrieben. http://msdn.microsoft.com/de-de/library/system.random.aspx

Du erstellst also eine Instanz der Random-Klasse und rufst dann die .Next-Methode der Instanz auf. Die Bedeutung der Parameter findest du mit Hilfe der MSDN sicher auch heraus.

Die VB-Funktion Rnd löst Dein Problem. Aber Vorsicht!

So wie TellYouWhat die Lösung vorschlägt, erhältst Du nach jedem Neustart Deiner Anwendung die gleiche Ziffernfolge. Test das doch einmal mit folgendem Code:

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Label1.Text = Label1.Text & vbCrLf + Würfel6.ToString
  End Sub

Und jetzt starte das Prog jweils neu.

Die Lösung ist eine einzige zusätzliche Zeile. Der Code sieht dann so aus:

  Function Würfel6() As Long
    Randomize()
    Würfel6 = Int(6 * Rnd()) + 1
  End Function

Hier wird immer eine neue Startzahl zufallsgesteuert ermittelt!


verreisterNutzer  20.01.2012, 21:57

xDD ein knappes Jahr zu spät, aber ... trotzdem danke :DD

also eine Beispiel-Funktion wäre

Function Würfel6() As Long
  Würfel6 = Int(6 * Rnd) + 1
End Function

Ausgeben bzw. dem Label übergeben brauchst du dann nur noch die Variable "Würfel6" - sollte funktionieren...

Ich habe dazu vor langer Zeit mal sowas programmiert, einfacher Computer. Ich habe dazu zwei beliebige Adressen des Bildspeichers ausgelesen und diese addiert und dann auf die gewünschte Zahl runtergerechnet.