Random Functie

  • Onderwerp starter Onderwerp starter novi
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

novi

Nieuwe gebruiker
Lid geworden
3 okt 2009
Berichten
4
Hallo Iedereen,
Wie kan mij dit uitleggen?
Ik ga 10 keer naar een Random functie.
Als ik elke keer stop In debug mode, krijg ik 10 keer 6 verschillende getallen terug.
Ga ik in Release mode er door heen, dan krijg ik 10 keer 6 dezelfde getallen terug.
hier is de code:

for (int i = 0; i < lot_max + 1; i++)
{
ListBox1.Items.Add( GenerateNumbers().ToString() );
}

private StringBuilder GenerateNumbers()
{
ArrayList numbers = new ArrayList();
Random RandomClass = new Random();
StringBuilder sb = new StringBuilder();
int randomNumber =0;

for (int i = 0; i < 6; i++)
{
do
{
randomNumber = RandomClass.Next(1, 49);
}
while (numbers.Contains(randomNumber));
numbers.Add(randomNumber);
}
numbers.Sort();
for (int j = 0; j < 6; j++)
{
sb.Append(numbers[j].ToString());
}
numbers = null;
RandomClass = null;

return sb;
}

Werkt in Debug, werkt niet in Release.
Alvast bedankt voot jullie hulp!
 
Dat heeft te maken met de random generator. Volgens mij werkt die op de volgende manier: Het eerste random nummer wordt gegenereerd op basis van tijd, alle volgende randoms in dat object zijn op basis van het eerste random nummer.
In jou code wordt er steeds een nieuw object gemaakt en als dit snel genoeg achter elkaar gaat dan zul je dus steeds het zelfde nummer terug krijgen. (voor de precieze werking moet je maar ff googlen)
De meest simpele oplossing is het systeem na elke random.next bv 10ms te laten wachten Thread.sleep(10)

Dit vind ik zelf niet echt een mooie op lossing dus je kan er ook voor zorgen dat het random object niet opnieuw gecreëerd wordt maar hergebruikt.
Dit kan op verschillende manieren bv je creëert eenmalig een random object en geeft deze mee als parameter mee aan GenerateNumbers functie.
Hieronder een kleine aanpassing van jouw code waar mee er wel random nummers worden gegenereerd.:

PHP:
Random RandomClass = new Random();
for (int i = 0; i < lot_max + 1; i++)
{

ListBox1.Items.Add( GenerateNumbers(RandomClass).ToString());

}

private StringBuilder GenerateNumbers(Random RandomClass);
{
ArrayList numbers = new ArrayList();
StringBuilder sb = new StringBuilder();
int randomNumber =0;

for (int i = 0; i < 6; i++)
{
do
{
randomNumber = RandomClass.Next(1, 49);
}
while (numbers.Contains(randomNumber));
numbers.Add(randomNumber);
}
numbers.Sort();
for (int j = 0; j < 6; j++)
{
sb.Append(numbers[j].ToString());
}
numbers = null;
RandomClass = null;

return sb;
}
 
Laatst bewerkt:
er is ook een minder fraaie oplossing :

Namelijk arraylist numbers = new arraylist( );

boven de functie alle functies zetten
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan