C# - Zufallszahlen besitzen einen mysteriösen Wert

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MrSchabernack.

    C# - Zufallszahlen besitzen einen mysteriösen Wert

    Hi,

    ich steh grad total aufm Schlauch.. möchte mit folgenden Code, Panels an zufälligen Positionen erscheinen lassen doch diese erscheinen nach und nach zu folgenden Bild (Anhang)..

    C#-Quellcode

    1. Random rnd = new Random();
    2. int y = rnd.Next(15, 535);
    3. Random rnd1 = new Random();
    4. int x = rnd1.Next(15, 145);
    5. Panel pan = new Panel();
    6. pan.Size = new Size(15,15);
    7. //pan.Location = new Point(y,x);
    8. pan.Left = y;
    9. pan.Top = x;
    10. pan.BackColor = Color.Tomato;
    11. this.panel.Controls.Add(pan);


    Ich glaub das ich grad nur einen total primitiven Denkfehler hab..

    Grüße MrSchabernack
    Bilder
    • Unbenannt.jpg

      25,53 kB, 624×277, 117 mal angesehen
    Aus der Online-Hilfe zum Konstruktor der Random-Klasse:
    Da die Uhr jedoch
    eine endliche Auflösung hat, werden durch das Erstellen von unterschiedlichen
    Random-Objekten mit dem parameterlosen Konstruktor
    unmittelbar nacheinander Zufallszahlengeneratoren erstellt, die identische
    Sequenzen von Zufallszahlen erzeugen.

    Wieso erzeugst du für jeden Zufallswert ein neues Random-Objekt? Instanziere dir ein einziges, merke dir das in einer Klassen-Variablen (in der Form z.B.) und hole dir dort mit der Next()-Methode jeweils einen Wert raus.
    Für den Anfang änder einfach die Zeile int x = rnd1.Next(15, 145); in int x = rnd.Next(15, 145);.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Ich Tippe mal darauf das der Code in einer Schleife (oder nem Button) liegt?
    Verschiebe die Initialisierung (new Random()) von rnd und rnd1 aus der Schleife (zb. ins Form_Load) so das die nur einmal initialisiert werden, das sollte dein Problem lösen.

    Edit: Gott wie ich den Hinweis vermisste das in der Zwischenzeit jmd. anderes was gepostet hat :(
    @Arby , das ich zwei mal rnd erstellt hatte war zu dem Zeitpunkt noch aus Test gründen. Aber ja mit dem anderen Tipp funktionierts jetzt ;)
    Danke auch an @slice

    Spoiler anzeigen

    C#-Quellcode

    1. int x = 0, y = 0;
    2. Random rnd = new Random();
    3. private void btnLos_Click(object sender, EventArgs e)
    4. {
    5. x = rnd.Next(15, 535);
    6. y = rnd.Next(15, 145);
    7. Panel pan = new Panel();
    8. pan.Size = new Size(15,15);
    9. //pan.Location = new Point(y,x);
    10. pan.Left = x;
    11. pan.Top = y;
    12. pan.BackColor = Color.Tomato;
    13. this.panel.Controls.Add(pan);
    14. }