Avatar billede simon_jacobsen Nybegynder
09. marts 2008 - 11:55 Der er 10 kommentarer og
1 løsning

random funktion

hej

Jeg har et problem med random funktionen i C#.
Når jeg køre koden:
            Random randomNumber;
            Random randomNumber2;
            int rndNum2;
            int rndNum;
            for(int i = 1; i < 100; i++)
            {
                            randomNumber = new Random();
            randomNumber2 = new Random();
           
                rndNum = randomNumber.Next(1, 7);
            rndNum2 = randomNumber2.Next(1, 7);
                Console.WriteLine(rndNum + " - " + rndNum2);
            }
            Console.Read();

problemet er at de samme tal altid falder ud, findes der en måde at kalde en metode der Randomizer på ny.
Avatar billede thesurfer Nybegynder
09. marts 2008 - 12:04 #1
Man skal ikke kalde new Random igen.. :-)

sådan:

            Random randomNumber;
            Random randomNumber2;
            int rndNum2;
            int rndNum;

            randomNumber = new Random();
            randomNumber2 = new Random();

            for(int i = 1; i < 100; i++)
            {
                rndNum = randomNumber.Next(1, 7);
            rndNum2 = randomNumber2.Next(1, 7);
                Console.WriteLine(rndNum + " - " + rndNum2);
            }
            Console.Read();
Avatar billede simon_jacobsen Nybegynder
09. marts 2008 - 12:17 #2
ok, nu skifter den hver gang men rndNum og rndNum2 er altid det samme.
Avatar billede nielle Nybegynder
09. marts 2008 - 12:20 #3
Hvad mener du med "nu skifter den hver gang" når du samtidigt skriver "men rndNum og rndNum2 er altid det samme" ?
Avatar billede nielle Nybegynder
09. marts 2008 - 12:25 #4
Ahh, ja nu er jeg med - det er faktisk en variation over samme problem som du havde før.

Du bør kun have én random i alt. To random's der initialisrese så tæt på hinanden, vil ikek vaære uafhængige. Sådan:

Random randomNumber = new Random();

for (int i = 1; i < 100; i++)
{
    int rndNum = randomNumber.Next(1, 7);
    int rndNum2 = randomNumber.Next(1, 7);
    Console.WriteLine(rndNum + " - " + rndNum2);
}
Console.Read();
Avatar billede simon_jacobsen Nybegynder
09. marts 2008 - 12:32 #5
ja nu virker det :)
men hvad skyldes det helt præcist ? kan man bare ikke have 2 randomizers ? eller hvordan
Avatar billede nielle Nybegynder
09. marts 2008 - 12:55 #6
Når computeren skal lave tilfældige tal ... så er de i virkeligheden slet ikke spor tilfældige. De bliver lavet via en algoritme som har den egenskab at resultatet opfører sig som om at det var tilfældigt (nok). Man taler ompseudi tilfældige tal – tal som ser tilfældige ud på overfladen

En sådan algoritme skal starte et sted, og hvis man altid starter den det samme sted vil man også få de samme tal hver gang (og det kan såmen være ganske nyttig).

For C#’s Random er det kaldet af constructoren som initialisere algoritmen. Ved initialiseringen, vil computeren skigge på tidspunktet og lave et startpunkt ud fra dette. Det kaldes et seed (et frø) for PRNG-algoritmen (Pseudo Random Number Generator).

Hvis du har to kald til en Random()-constructor:

randomNumber = new Random();
randomNumber2 = new Random();

så er der en meeeget stor sandsynlighed for at de starter med det samme seed, og at de derfor vil generere de samme tal hvis man sammenligner dem side om side.

Dette er grunden til at man kun bør initialisere sin random én gang i alt, og at man kun bør have én random i alt.

Hvorfor vil du i øvrigt have to, når det kan klares med én?
Avatar billede nielle Nybegynder
09. marts 2008 - 13:02 #7
ompseudi -> om pseudo
Avatar billede simon_jacobsen Nybegynder
09. marts 2008 - 17:46 #8
mange tak,  smid et svar
Avatar billede nielle Nybegynder
09. marts 2008 - 18:12 #9
Arne_v har i øvrigt skrevet nogle artikler om faldgrupperne ved pseudo-tilfældige tal her på eksperten:

http://www.eksperten.dk/artikler/680
http://www.eksperten.dk/artikler/686
http://www.eksperten.dk/artikler/951
Avatar billede simon_jacobsen Nybegynder
09. marts 2008 - 18:17 #10
takker :)
Avatar billede nielle Nybegynder
09. marts 2008 - 18:24 #11
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester