VB Zufall
lima-city → Forum → Programmiersprachen → Basic
art
bereich
bestimmten bereichs
code
falsch gemacht string
folgende formel
funktion
maximalwert
nachfolgenden aufruf
negativen argument
numerischen argument
obergrenze
rand
string
text
untergrenze
verwenden
zahl
zauberwort
zufall
-
Ich habe den Code
Dim I as Integer I=CInt(100*Rnd()) If I > 50 Then String = "A" Else String = "B" End If
Aber String ist immer "A".
I ist imer genau 70
Wenn ich schreibe
Dim I As Integer I = Int(Rnd()) MsgBox(CStr(I))
kommt immer I=0
Was habe ich falsch gemacht. String sollte eigentlich nur in 50% aller fälle "A" sein.
mfg
Beitrag zuletzt geändert: 27.11.2009 16:50:19 von impirial-war -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ein Blick in die Dokumentation von VB hätte genügt (F1-Taste):
Die Rnd-Funktion gibt einen Wert zurück, der kleiner als 1, aber größer als oder gleich Null ist.
Der Wert von Zahl bestimmt, wie Rnd eine Zufallszahl generiert:
Für jeden gegebenen Standardwert wird dieselbe Zufallszahlenfolge generiert, weil bei jedem nachfolgenden Aufruf der Rnd-Funktion die vorherige Zahl als Startwert für die nächste Zahl in der Folge dient.
Bevor Sie Rnd aufrufen, verwenden Sie die Randomize-Anweisung ohne Argument, um den Zufallszahlengenerator mit einem Startwert zu initialisieren, der auf dem Systemzeitgeber basiert.
Verwenden Sie die folgende Formel, um ganzzahlige Zufallszahlen innerhalb eines bestimmten Bereichs zu erzeugen:
Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Obergrenze steht hier für die größte Zahl des Bereichs und Untergrenze für die kleinste Zahl des Bereichs.
Anmerkung Wenn Sie Folgen von Zufallszahlen wiederholen möchten, rufen Sie Rnd mit einem negativen Argument auf, unmittelbar bevor Sie Randomize mit einem numerischen Argument verwenden. Durch Verwenden von Randomize mit demselben Wert für Zahl wird die vorherige Folge nicht wiederholt.
Da Rnd() zwischen 0 und 1 liegt und du den Wert von Rnd() in einen Integer umwandelst, wird dieser immer 0.
Richtig wäre also Int(Rnd() * 10) für einstellige Zufallszahlen und Int(Rnd() * 100) für zweistellige Zufallszahlen usw. -
Bei
Dim I As Integer I = Int(Rnd() * 100) MsgBox(CStr(I))
kommt aber trotzdem immer 17 -
Das Zauberwort heißt Randomize
Schreib mal deinen Code so:
Randomize Dim I as Integer I=CInt(100*Rnd()) If I > 50 Then String = "A" Else String = "B" End If
-
Das Problem dabei ist, Rnd() wird immer mit 0 initalisiert, wobei der Algorithmus immer gleich abläuft (einen echten Zufall gibt es also nicht). Mit der Funktion Randomize wird Rnd() nach der aktuellen Zeit initialisiert (also fast ein Zufall)
-
Dim random As New Random Dim I as Integer I=CInt(100 * random(minimalwert, maximalwert)) If I > 50 Then String = "A" Else String = "B" End If
oder so in der art -
Ich habs immer so gemacht:
Dim rand As New Random() Dim number = rand.Next(TextBox3.Text, TextBox4.Text) TextBox5.Text = number.ToString
Funktioniert auch einwandfrei.
-
impirial-war schrieb:
Ich habe den Code
Dim I as Integer I=CInt(100*Rnd()) If I > 50 Then String = "A" Else String = "B" End If
Aber String ist immer "A".
I ist imer genau 70
Wenn ich schreibe
Dim I As Integer I = Int(Rnd()) MsgBox(CStr(I))
kommt immer I=0
Was habe ich falsch gemacht. String sollte eigentlich nur in 50% aller fälle "A" sein.
mfg
dim zufall as integer dim text as string randomize timer zufall = int(rnd * 100) select case zufall case < 50: text = "B" case > 50: text = "A" end select Msgbox text
-
Ich schätze mal, das das prob mit dem Rnd() einfach am Integer liegt, also warum den nich einfach zum double machn?
denn müsste es klappen -
Hinweis:
Dazu gibt es auch ein Tutorial in Lima-City.
Wobei ich finde, dass man dieses mal überarbeiten sollte : - ) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage