Thread: Random number generator
-
31-01-2014, 19:07 #1
Random number generator
Hallo allemaal,
ik zou graag mijn eigen rng schrijven, ik heb al een basis, maar nu zit ik vast. Ik heb dit al:
Random random = new Random();
int num = random.Next(1, 11);
tbxGetal.Text = Convert.ToString(num);
Nu zou ik graag hebben dat hij een random nummer kiest uit 2 verschillende groepen (1,11) en (15,20) ofzo. Weet iemand hoe ik dit zou kunnen doen?
Alsvast bedankt!no votes
-
-
31-01-2014, 19:50 #2Member
- Registered
- 11/05/13
- Location
- Prov. Antwerpen
- Posts
- 595
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Gewoon een extra integer (num2 ofzo) gebruiken.
En wat wil je dan doen met de 2 nummers? In een array steken? Samen voegen? Of allebei in je tbxGetal steken?Code:int num2 = random.Next(15,20);
Code:Random random = new Random(); int num1 = random.Next(1, 11); int num2 = random.Next(15,20); tbxGetal.Text = Convert.ToString(num1) + " " + Convert.ToString(num2);
no votes
-
31-01-2014, 19:54 #3
Ik zou deze 2 (later mss meerdere) nummer groepen dan willen gebruiken om dan uit 1 van die groepen een random nummer te halen, en deze dan weer te geven in mn textbox
no votes
-
31-01-2014, 21:03 #4Member
- Registered
- 11/05/13
- Location
- Prov. Antwerpen
- Posts
- 595
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Lijkt me heel bizar en vaag, waarom zou je dat doen? Waarom niet gewoon een nieuwe random? Randoms genereren om in een lijst te zetten en dan random een getal daar uit te halen...
no votes
-
01-02-2014, 00:16 #5Member
- Registered
- 19/02/06
- Location
- -
- Posts
- 4,048
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/73
Code:Random random = new Random(); List<int> list = new List<int>() list.Add(random.Next(1, 11)); list.Add(random.Next(15,20)); int num = list[random.Next(0, list.Count)];
no votes
-
01-02-2014, 10:36 #6
Bedankt YaMo, dit is echt net wat ik zocht!
ik kan hier nog vele kanten mee uit qua variaties enzo
no votes
-
03-02-2014, 19:14 #7
Ik ben al een heel stuk opgeschoten met mijn programma, maar nu had ik graag geweten of het mogelijk was om heel simpel getallen uit die lijst van randoms te excluden (getallen te bepalen door middel van checkboxen)
no votes
-
04-02-2014, 11:39 #8Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
Let wel zwaar op met deze oplossing.
De kans op bijvoorbeeld een 15 zal dubbel zo groot zijn als de kans op een 10.
Kans op een specifiek getal uit eerste interval is namelijk 0.5 * 1/12 en de kans op een specifiek getal uit tweede interval is 0.5 * 1/6
Is dit wat je wilt bereiken of niet? Want indien je wilt dat elk getal evenveel voorkomt, zal je een andere oplossing moeten zoeken.
Bijvoorbeeld, een simpele oplossing voor uw specifiek voorbeeld die wel (pseudo)random is:
Indien je een meer algemene klasse wilt schrijven:Code:int num1 = random.Next(1, 17); if(num1 > 11) num1 += 3;
- Maak een eigen klasse aan met de properties Min & Max en een methode SizeInterval() die "Max-Min+1" teruggeeft
- De gebruiker kan nu intervallen ingeven:
- rg.Add(1,11); rg.Add(15,20); => twee intervallen die aan de lijst toegevoegd worden
- rg.Add(16); => kan een shortcut zijn voor rg.Add(16,16);
- geef error terug indien eerste parameter groter is dan tweede parameter
- om te excluden: rg.Exclude(17); => zoek in lijst naar interval waar 17 in voorkomt. Indien dit ergens voorkomt, split interval in twee. In dit voorbeeld zou je dus de entry (15,20) veranderen naar (15,16) en een tweede entry (18,20) toevoegen aan lijst
- dit zal enkel werken indien je eerst rg.Add(15,20); gedaan hebt en dan pas rg.Exclude(17); => indien het ook moet werken in omgekeerde volgorde, voeg de excludes toe aan aparte lijst en overloop die pas op het einde net voor je rg.Generate(); doet
- Geef een error terug indien gebruiker een overlappend interval ingeeft ofwel pas je het bestaande interval aan. Maw, indien de gebruiker rg.Add(18,22); doet zou je (15,20) kunnen aanpassen door de Max property op 22 te zetten of een error teruggeven
- Na het ingeven van de intervallen, call je rg.Generate();
- Deze methode berekent eerst het totaal aantal elementen ("Total") door op elk interval SizeInterval() te callen en deze op te tellen
- Sorteer de lijst op "Min" value
- Daarna roep je random.Next(1, Total) op (laten we dit X noemen)
- Daarna ga je de lijst af. Zolang X groter is dan SizeInterval(), doe je (X - SizeInterval()) en ga je met de resterende waarde van X naar het volgende interval.
- Bijvoorbeeld: Als X 10 is en het eerste interval heeft 8 elementen, dan heeft X nog waarde 2. Ga nu naar het tweede interval. Indien SizeInterval() <= die 2, doe je op dat interval "random waarde" = (Min+X-1) waarbij X hier 2 is
Last edited by MilM; 04-02-2014 at 12:13.
no votes

