1. #1
    DragonX's Avatar
    Registered
    19/12/10
    Location
    kortrijk
    Posts
    132
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0

    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  

  2. #2
    De Wouter's Avatar
    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.

    Code:
    int num2 = random.Next(15,20);
    En wat wil je dan doen met de 2 nummers? In een array steken? Samen voegen? Of allebei in je tbxGetal steken?

    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  

  3. #3
    DragonX's Avatar
    Registered
    19/12/10
    Location
    kortrijk
    Posts
    132
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    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  

  4. #4
    De Wouter's Avatar
    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  

  5. #5
    YaMo's Avatar
    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  

  6. #6
    DragonX's Avatar
    Registered
    19/12/10
    Location
    kortrijk
    Posts
    132
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Bedankt YaMo, dit is echt net wat ik zocht! ik kan hier nog vele kanten mee uit qua variaties enzo
    no votes  

  7. #7
    DragonX's Avatar
    Registered
    19/12/10
    Location
    kortrijk
    Posts
    132
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    0/0
    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  

  8. #8

    Registered
    20/09/04
    Location
    Kortrijk / Gent
    Posts
    7,177
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/43
    Quote Originally Posted by YaMo View Post
    This quote is hidden because you are ignoring this member. Show
    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)];
    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:
    Code:
    int num1 = random.Next(1, 17);
    if(num1 > 11)
     num1 += 3;
    Indien je een meer algemene klasse wilt schrijven:
    1. Maak een eigen klasse aan met de properties Min & Max en een methode SizeInterval() die "Max-Min+1" teruggeeft
    2. 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
    3. Na het ingeven van de intervallen, call je rg.Generate();
    4. Deze methode berekent eerst het totaal aantal elementen ("Total") door op elk interval SizeInterval() te callen en deze op te tellen
    5. Sorteer de lijst op "Min" value
    6. Daarna roep je random.Next(1, Total) op (laten we dit X noemen)
    7. 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.
    8. 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  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in