Just nu i M3-nätverket
Gå till innehåll

Slumpa ett tal mellan 1 och 10 i C#


Henke1988

Rekommendera Poster

Hej!

 

Jag har en enkel fråga om C#.

Jag behöver slumpa ett tal mellan 1 och 10, där 1 alltså är det lägsta slumpgeneratorn kan ge och 10 är det högsta.

Hur lyder en sådan kod?

 

Det här låter säkert som en barnsligt enkel fråga för er vana C#-programmerare, men jag är i princip helt ny i språket.

:P

 

Tack på förhand!

 

//Henrik

Länk till kommentar
Dela på andra webbplatser

Det finns andra klasser än Random för att uppnå bättre simulerad slumpmässighet, men eftersom du är nybörjare så får du exempel på den enkla metoden

 

System.Random rnd = new Random((int)DateTime.Now.Ticks);
int num = rnd.Next(1, 11);

Länk till kommentar
Dela på andra webbplatser

Ledsen att dra upp en död tråd, men jag behöver göra en follow-up på samma ämne.

 

System.Random rnd = new Random((int)DateTime.Now.Ticks); 

fungerade bra som grundläggande bas, men nu behöver jag en bättre slumpgenerator.

Värdena som System.Random gav var för snarlika, och vid nästan alla tillfällena gav generatorn samma tal två gånger i rad (vilket ställde till stora problem för mig, eftersom det innebar att alla par i mitt C# Memory spel hamnade på samma plats vid varje spel).

 

Finns det någonting bättre, men ändå inte för avancerat?

(Det gäller fortfarande ett värde mellan 1 och upp till 10.)

 

Tack på förhand!

Länk till kommentar
Dela på andra webbplatser

Ok, då går vi upp ett steg och väljer klassen RandomNumberGenerator i Cryptography.

       private int GetRandomNumber(int max)
       {
           System.Security.Cryptography.RandomNumberGenerator rnd = System.Security.Cryptography.RandomNumberGenerator.Create();
           byte[] data = new byte[1];
           rnd.GetNonZeroBytes(data);
           int n = 1 + data[0] % max;
           return n;
       }

 

Använd med GetRandomNumber(10) i ditt fall

Länk till kommentar
Dela på andra webbplatser

Det kan tilläggas att du aldrig kan få sann slumpmässighet i ett dataprogram, för det krävs nyttjande av externa fysiska fenomen som kan anses äkta slumpmässiga, ex. vitt brus.

Det finns en bra sajt som erbjuder slumptal genererade utefter atmosfäriskt brus.

http://www.random.org/integers/

Länk till kommentar
Dela på andra webbplatser

Tusen tack!

Den nya generatorn gav bra mycket bättre resultat än den förra.

Nu fungerar spelet riktigt bra.

:)

Länk till kommentar
Dela på andra webbplatser

  • 4 veckor senare...

Hej!

 

Jag har en enkel fråga om C#.

Jag behöver slumpa ett tal mellan 1 och 10, där 1 alltså är det lägsta slumpgeneratorn kan ge och 10 är det högsta.

Hur lyder en sådan kod?

 

Det här låter säkert som en barnsligt enkel fråga för er vana C#-programmerare, men jag är i princip helt ny i språket.

:P

 

Tack på förhand!

 

//Henrik

 

Här har du koden.

Random randomNumber = new Random();
int number = randomNumber.Next(1,11);

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Ok, då går vi upp ett steg och väljer klassen RandomNumberGenerator i Cryptography.

   	private int GetRandomNumber(int max)
       {
           System.Security.Cryptography.RandomNumberGenerator rnd = System.Security.Cryptography.RandomNumberGenerator.Create();
           byte[] data = new byte[1];
           rnd.GetNonZeroBytes(data);
           int n = 1 + data[0] % max;
           return n;
       }

 

Använd med GetRandomNumber(10) i ditt fall

 

Hallå, jag behöver också hjälp!

 

När jag gjorde din första slumpkod. Den som du skrev var för nybörjare så fick jag alltid samma värde hela tiden så då tänkte jag testa ditt andra förslag.

 

Jag kopierade in din kod. Men förstår inte vad du menar med "Använd GetRandomNumber(10)". Kan du förklara hur och var man ska använda den? Och vad är det för int man ska använda sen. Alltså är det int max eller int n som blir slumpat?

 

MVH aicsaic

Länk till kommentar
Dela på andra webbplatser

Men förstår inte vad du menar med "Använd GetRandomNumber(10)". 

 

Detta är anropet till min funktion. Den använder du alltså på det ställe där du vill tilldela en variabel ett slumpat värde.

 

Om du alltså i din kod vill ha en variabel "slump" som får ett värde mellan säg 1 och 100, så skriver du:

int slump = GetRandomNumber(100);

Funktionen i sig behöver du inte tänka på vad den innehåller, bara nöj dig med att den fungerar (om det är slumptal mellan 1 och max du vill ha)

 

Vet inte om detta redde ut frågetecknen, hoppas det.

Länk till kommentar
Dela på andra webbplatser

Men förstår inte vad du menar med "Använd GetRandomNumber(10)". 

 

Detta är anropet till min funktion. Den använder du alltså på det ställe där du vill tilldela en variabel ett slumpat värde.

 

Om du alltså i din kod vill ha en variabel "slump" som får ett värde mellan säg 1 och 100, så skriver du:

int slump = GetRandomNumber(100);

Funktionen i sig behöver du inte tänka på vad den innehåller, bara nöj dig med att den fungerar (om det är slumptal mellan 1 och max du vill ha)

 

Vet inte om detta redde ut frågetecknen, hoppas det.

 

Förstod vad du menade nu. Fick in det utan error och fel. Bara det att det fortfarande är så att det inte slumpas. Det blir samma tal hela tiden. Jag vill att mitt tal ska slumpa mellan 1 och 3 men blir första hela tiden fortfarande. Jag kopierade din kod och sen int slump = GetRandomNumber(3);

 

Något förslag?

 

Edit: Ächs glöm vad jag skrev, det var jag som hade missat en grej, funkar perfekt nu. Tack så mycket för hjälpen!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...