Random zwraca w konstruktorze te same liczby

0

Witam
otóż mam pewien poblem z losowaniem liczby, gdyż w poniższym kodzie zwraca mi ciągle te same liczby w konstruktorze pomimo że obiekt klasy Random jest napisany jako pole w klasie

class Pies : Zwierze
    {
        Random nrd = new Random();
        private bool agresywny;

        public bool Agresywny
        {
            get { return agresywny; }
            private set { }
        }

        public Pies (string imieZw)
            :base(imieZw)
        {
            this.agresywny = nrd.NextDouble() > 0.5;
        }
        public override void Przedstaw()
        {
            base.Przedstaw();
            Console.Write(agresywny?"Jest agresywny"+"\n":"Nie jest agreswny "+"\n");
        }

    } 
0

Spróbuj przy każdym losowaniu przypisywać do nrd nowy Random z jakimś ziarnem, np.:

    public Pies (string imieZw) : base(imieZw)
        {
        nrd = new Random(DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond);
        this.agresywny = nrd.NextDouble() > 0.5;
        }

U mnie działa.

0

u mnie nie działa co jakiś czas pierwszy element jest inny a reszta taka sama i to bez różnicy czy dam to w konstruktor czy nie

jeśli napisze

Random rnd = new Random(DateTime.Now.Millisecond); 

to zawsze pierwsza liczba jest inna a reszta taka sama

4

static private Random nrd = new Random();

0

dzięki somekind działa :)
a możesz mi wytłumaczyć dlaczego to musi być statyczna i prywatna metoda a nie może być tak jak ja na początku napisałem?

5

Bez bezparametrowy Random bierze ziarno z zegara systemowego jak w krótkim odstępie czasu stworzysz kilka instancji Random to będą miały to samo ziarno. Dlatego najlepiej jest stworzyć jedną instancje i używać jej w całym programie/module.

Więc teraz powinno być dla ciebie jasne mniej więcej czemu wystarczyło dodać static. ;))

Po więcej informacji i przykładów zapraszam do msdn: http://msdn.microsoft.com/en-[...]/system.random(v=vs.110).aspx

0

dzieki wielkie

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