Klasa Random i typy referencyjne - losowanie tej samej liczby

0

Czemu w poniższym kodzie jest losowana ta sama liczba dla poszczególnych obiektów?

class Program
    {
        public Random ran = new Random();
       
        static void Main(string[] args)
        {
            Program obiekt1 = new Program();
            Program obiekt2= new Program();
            Console.WriteLine(obiekt1.ran.Next(1,100));      
            Console.WriteLine(obiekt2.ran.Next(1,100));
            Console.ReadLine();
        }
    } 
0

Ponieważ tworzysz praktycznie w tym samym czasie dwie różne instancje klasy Random, która pewnie za seed bierze aktualny czas. A jako że czas się nie zdążył zmienić, no to masz co masz.

0

Dlatego, ze obiekt Random jest tworzony uzywajac systemowego clocka. Kiedy odwolujesz sie do tego obiektu w bardzo krotkim odstepie czasu, obiekty te beda zaseedowane ta sama wartoscia -> wygeneruja ta sama "losowa" liczbe. Pole random powinno byc static

0

Całkiem łatwe rozwiązanie:

class Program
    {
        private static Random seed = new Random();
        public Random ran = new Random(seed.next()^0x7FFFFFFF);
 
        static void Main(string[] args)
        {
            Program obiekt1 = new Program();
            Program obiekt2= new Program();
            Console.WriteLine(obiekt1.ran.Next(1,100));      
            Console.WriteLine(obiekt2.ran.Next(1,100));
            Console.ReadLine();
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1