Metoda statyczna zwraca zawsze tę samą wartość

0

Witam, mój problem prezentuje się następująco: chcę stworzyć listę złożoną z obiektów klasy "Patient", która wygląda tak:

class Patient
    {

        public Patient(int age, string name, string surname)
        {
            Age = age;
            Name = name;
            Surname = surname;

        }

        public string Name { get; set; }
        public string Surname { get; set; }
        public int Age { get; set; }
    }

Listę chcę stworzyć w ten sposób:

static void Main(string[] args)
        {
            
            List<Patient> PatientList = new List<Patient>();
            Random rnd = new Random();

            for (int i = 0; i < 25; i++)
            {
                PatientList.Add(new Patient(rnd.Next(13,81), Generator.CreateName(), Generator.CreateSurname() ));
            }      
        }

W klasie Generator posiadam dwie metody statyczne. Problem polega na tym, że mimo tego, że po uruchomieniu programu wszyscy pacjenci nazywają się zawsze tak samo. Innymi słowy metody losują imiona i nazwiska tylko raz podczas uruchamiania.
Co jest tego przyczyną? Jak sprawić, żeby podczas dodawania kolejnego pacjenta w pętli, metody

CreateName()

i CreateSurname()

 zwracały różne wartości?
0

to moze podasz kod tych metod? Tu wrozbitow nie znajdziesz ;)

0

@fasadin no tak, gdzie ja mam głowę

 public static string CreateName()
        {
            string[] NameList = new string[20];

            NameList[0] = "Jan";
            NameList[1] = "Paweł";
            NameList[2] = "Mateusz";
            NameList[3] = "Piotr";
            NameList[4] = "Kamil";
            NameList[5] = "Łukasz";
            NameList[6] = "Dawid";
            NameList[7] = "Maciej";
            NameList[8] = "Marek";
            NameList[9] = "Karol";
            NameList[10] = "Romuald";
            NameList[11] = "Wiktor";
            NameList[12] = "Tobiasz";
            NameList[13] = "Stefan";
            NameList[14] = "Andrzej";
            NameList[15] = "Jarosław";
            NameList[16] = "Adam";
            NameList[17] = "Antoni";
            NameList[18] = "Michał";
            NameList[19] = "Przemysław";

            Random rnd = new Random();

            return NameList[rnd.Next(NameList.Length)];
		}

	public static string CreateSurname()
        {

            string[] FirstSyllable = new string[20];

            FirstSyllable[0] = "No";
            FirstSyllable[1] = "Ka";
            FirstSyllable[2] = "Le";
            FirstSyllable[3] = "Dąb";
            FirstSyllable[4] = "Kra";
            FirstSyllable[5] = "Hry";
            FirstSyllable[6] = "Ma";
            FirstSyllable[7] = "Bo";
            FirstSyllable[8] = "Wiś";

            string[] MiddleSyllable = new string[20];

            MiddleSyllable[0] = "wal";
            MiddleSyllable[1] = "niew";
            MiddleSyllable[2] = "wan";
            MiddleSyllable[3] = "dow";
            MiddleSyllable[4] = "zur";
            MiddleSyllable[5] = "niewie";
            MiddleSyllable[6] = "brąw";
            MiddleSyllable[7] = "rzań";

            string[] LastSyllable = new string[20];

            LastSyllable[0] = "ski";
            LastSyllable[1] = "cki";
            LastSyllable[2] = "wak";
            LastSyllable[3] = "ak";
            LastSyllable[4] = "ik";
            LastSyllable[5] = "ur";

            string surname = null;

            Random rnd = new Random();
            Random toBe = new Random();

            surname += FirstSyllable[rnd.Next(10)];

            if (toBe.Next(2) == 1)
            {
                surname += MiddleSyllable[rnd.Next(8)];
            }

            surname += LastSyllable[rnd.Next(7)];

            return surname;

		}

Metody to na razie małe potworki, ale chodzi o sam mechanizm działania.

5

To dlatego, że obiekty Random tworzysz sobie w każdej metodzie na nowo. To co wylosuje ten obiekt zależy od aktualnego czasu, ponieważ metody wywołujesz bardzo szybko, to za każdym razem nowy obiekt Random losuje tą samą wartość.

Żeby to miało sens, jedna klasa powinna mieć jedno statyczne pole typu Random.

4

Dlatego sie tak dzieje bo w kazdej metodzie tworzysz od nowa

Random rnd = new Random();

stworz raz obiekt random i go po prostu uzywaj zamiast tworzyc od nowa

edit. @somekind byl pierwszy

0

@fasadin @somekind Działa, wielkie dzięki, Panowie :)

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