Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Random() - Generowanie ciągu znaków


Rekomendowane odpowiedzi

Opublikowano

Cześć. Mam taką funkcję:

        private string Generate()
        {
            string out = "";
            Random rnd = new Random();
            for (int i = 0; i < 64; i++)
            {
                out += rnd.Next(0, 2).ToString();
            }
            return out;
        }

Mój problem polega na tym, że funkcja ta wywołana 2 razy w odstępie nie większym niż 10ms zwraca tą samą wartość. Dlaczego tak się dzieje? Jak to naprawić?

 

----------------------

 

Znalazłem rozwiązanie w sieci, teraz już jest ok:

        private string Generate(int seed)
        {
            Random rnd;
            object syncObj = new object();
            string out = "";
            rnd = new Random(seed);

            for (int i = 0; i < 64; i++)
            {
                lock (syncObj)
                {
                    if (rnd == null)
                        rnd = new Random();
                    out+= rnd.Next(0, 2).ToString();
                }
            }
            return out;
        }

4417049059_6234f40fb5.jpg
Storm has passed but the destruction are still visible.

Opublikowano

Duplikaty występują, ponieważ seed jest taki sam. Możesz to poprawić podając własny, np. z GUID lub DateTime.

Opublikowano

Tak dla jasności. Dzieje się tak ponieważ są to liczby pseudolosowe. Nie mają nic wspólnego z faktyczną losowością. A jest to uzależnione od czasu. Gdzieś są wzory w jaki sposób jest zwracana wartość z Randoma. Wykorzystywany jest tam czas, a gdy czas będzie taki sam to wygeneruje te same liczby

Osobiście pomagam tylko na PW lub e-mail


-----------------------------------------------------------------


https://github.com/smietanka

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...