none
Problem mit Random: Immer derselbe Wert, wenn ich Random in einer Klasse aufrufe RRS feed

  • Frage

  • Hallo,

    bei folgendem Code wird das Array stars mit 100 identischen Zufallszahlen gefüllt:

    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Star
        {
            public int vx;
            Random r = new Random();
    
            public Star()
            {
                vx = r.Next();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
    
                Star[] stars = new Star[100];
                for (int i = 0; i < stars.Length; i++)
                {
                    stars[i] = new Star(); // Thread.Sleep(10);
                }
    
                for (int i = 0; i < stars.Length; i++)
                {
                    Console.WriteLine(stars[i].vx);
                }
                Console.ReadKey();
            }
        }
    }

    In der Ausgabeschleife sind alle Werte gleich. Ich habe schon einiges getestet:

    - Wenn ich die Zufallszahlen in einer eigenen Methode zuweise, bleibt das Problem bestehen.

    - Wenn ich die Zufallszahlen in Main erzeuge und als Parameter übergebe, ist alles ok.

    - Wenn ich nach vx = r.Next() eine Thread.Sleep(10)-Anweisung einfüge, erhalte ich meistens eine neue Zufallszahl, oft aber 2x dieselbe und erst dann eine neue. Bei Thread.Sleep(20) sind die Zufallszahlen dann ok.

    Getestet habe ich mit Visual Studio 2013 und Visual Studio 2017RC.

    Ich verstehe das nicht. Weiß jemand, woran das liegt?



    • Bearbeitet H St Montag, 27. Februar 2017 23:51
    Montag, 27. Februar 2017 23:50

Antworten

Alle Antworten