Zufallszahl 0-1

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Willkommen im Forum.

    Jakob schrieb:

    hab jetzt schon diverse Codes ausprobiert aber die funktionieren nicht richtig
    Nämlich?

    Jakob schrieb:

    Zufallszahl zwischen Null und Eins
    Ne ganze Zahl zwischen 0 und 1 gibt es nicht. Daher wohl Gleitkommazahl. Wenn ich bei ner Suchmaschine meiner Wahl vb.net zufallszahl eingebe, kommt tonnenweise. Vielleicht reicht der passende MSDN-Artikel schon. Erklärungen folgen bei ernstzunehmenden (sorry, aber ich bin anfänglich etwas skeptisch bei solchen Posts) Bemühungen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Jakob Willkommen im Forum. :thumbup:
    Gut wäre es, wenn Du den nicht funktionierenden Code gepostet hättest.
    Frage: Willst Du zufällige Folgen von Integher-Zahlen aus {0, 1}
    oder
    willst Du Zu Float-Zufallszahlen von { 0 ... 1 }?
    Sieh Dir mal die Klasse Random an: docs.microsoft.com/de-de/dotne…m.random?view=netcore-3.1
    Du instanziierst eine Random-Instanz und fragst die nächste Zahl ab.

    VB.NET-Quellcode

    1. Dim rnd = New Random()
    2. Dim val1 = rnd.Next(0, 1)
    3. Dim val2 = rnd.NextDouble
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kurzer Einspruch: Zeile#2 gibt immer 0, da die Obergrenze exklusive ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe bisher ein Spiel/Programm programmiert,bei dem sich ein kreis bewegt und auf den man dann draufklicken muss
    um Punkte zu bekommen aber der Kreis bewegt sich immer nur in einer Linie von oben links nach unten rechts
    und ich wollte jetzt die Koordinaten ein wenig diferenzieren
    indem ich den ersten zufälligen Integer mit einer zufälligen fließkommazahl multipliziere
    um ein breiter gefächertes Ergebniss zu erhalten Code bisher wie folgt:

    Visual Basic-Quellcode

    1. Public Class Form1
    2. Dim punkte As Integer = 0
    3. Dim randomx As New Random
    4. Dim randomy As New Random
    5. Public Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    6. 'Zufällige Koordinaten erstellen
    7. Dim xposition As Integer = randomx.Next(1, 555)
    8. Dim yposition As Integer = randomy.Next(1, 415)
    9. '(nur zum Test)Koordinaten anzeigen
    10. xpositionlbl.Text = xposition
    11. ypositionlbl.Text = yposition
    12. 'Dem Kreis die Koordinaten zuweisen
    13. Kreis.Location = New Point(xposition, yposition)
    14. 'Die Geschwindigkeit des Timers anzeigen
    15. Label1.Text = Timer1.Interval
    16. End Sub
    17. Private Sub Kreis_Click(sender As Object, e As EventArgs) Handles Kreis.Click
    18. 'Punktesystem und bei einem Klick den Timer verschnellern
    19. punkte += 10
    20. punktelbl.Text = punkte
    21. Timer1.Interval -= 1
    22. 'nach einem Klick direkt eine neue Koordinate erstellen
    23. Dim xposition As Integer = randomx.Next(1, 555)
    24. Dim yposition As Integer = randomy.Next(1, 415)
    25. 'und diese dem Kreis zuordnen
    26. Kreis.Location = New Point(xposition, yposition)
    27. End Sub
    28. End Class
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort Option Strict On-Probleme in den Zeilen#11, #12, #16, #22

    btw: bitte korrekte CodeTags verwenden. Du hast den VB6-Tag für Deinen Code gewählt, VB.NET ist aber richtig.

    Und zum Abschluss noch zur Problemlösung: Lösche randomy in Z#5 und verwende überall randomx. Zwei so knapp nacheinander erzeugte Zufallsgeneratoren erzeugen fast immer die gleichen Zufallszahlen. Einer reicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich schrieb, lösche Zeile#5. Der Rest wird nur umbenannt, von randomy auf randomx. Oder besser gleich auf Random.

    VB.NET-Quellcode

    1. Dim Random As New Random
    2. '…
    3. Dim xposition As Integer = Random.Next(1, 555)
    4. Dim yposition As Integer = Random.Next(1, 415)


    btw: Warum heißt der Thread eigentlich Zufallszahl 0-1?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    btw: Warum heißt der Thread eigentlich Zufallszahl 0-1?

    weil ich zuerst noch zwei Zufallszahlen einfügen wollte um diese dann mit den ersten zu multiplizieren um mehr Variabilität reinzubringen und da hätte ich eben eine Zahl zwischen 0 und 1 gebraucht damit ich im Bild bleibe

    PS: Ich habs jetzt ohne die 5.Zeile ausprobiert und funktioniert jetzt sehr gut

    Vielen Dank dass ihr(vor allem du VaporiZed) mir so schnell geholfen habt.
    Das hinterlässt natürlich gleich mal einen Guten Eindruck.
    Ich wüdre mich freuen wenn ich auch bei zukünftigen Fragen wieder auf VB Paradise zurückgreifen könnte

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jakob“ ()

    VaporiZed schrieb:

    Kurzer Einspruch:
    Ich weiß.
    Das hatte ich als C&P-Bremse reingebaut. :thumbsup:
    @Jakob Der Sinn der Verwendung nur einer Random-Instanz besteht darin, dass dann gesichert ist, dass die Werte tatsächlich zueinander zufällig sind. Bei zwei Instanzen ist zwar jede Folge in sich zufällig, bezüglich der Werte der anderen Reihe jedoch nicht unbedingt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Jakob schrieb:

    Ich dachte eben
    Wenn Du so herangehst, solltest Du unbedingt in der MSDN / Nidrosoft Docs nachlesen, bevor Du irgend eine Zeile Code schreibst.
    Es ist nicht sinnvoll, wenn Du wegen jedes kleinen Problems hier einen Thread eröffnest, um es zu lösen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!