Jag ska generera ett tal mellan t.ex. 1 - 200 och lagra det i en databas. Problemet jag har är att jag inte vet hur jag gör om det genereras ett tal som redan finns lagrat i databasen? Inträffar det vill jag generera ett nytt tal och fortsätta så tills jag får ett tal som inte finns lagrat. Ett sätt att veta att ett tal är med endast en gång är att göra som när du blandar en kortlek. Klart det gar att anvanda Random,Slumpmässigt val?
Hur kan jag sedan hämta ut alla tal som finns lagrade och slumpmässigt välja ett av dom? Det är inte säkert att alla tal mellan 1 - 200 är valda.Sv: Slumpmässigt val?
Gör en array med 200 element. Skriv 1, 2, 3....198, 199, 200 i ordning till arrayn.
Slumpa sedan ut två olika index mellan 0-199 och växla plats på elementen med de indexen.
Om du sedan inte ska ha med alla elementen så slumpar du ut hur många från start av arrayn du ska ha med och slumpar sedan ut ett av dem.
Det här behandlar inte något med databasen utan endast med slumpandet.
/RubenSv: Slumpmässigt val?
Random rand = new Random();
int myRandom = rand.Next(1,200);
Vet inte vad det basta sattet ar hur du ska gora med databasen, ska du iterera manga ganger eller ska du endast lagga in fa nummer? Ska mer an en anvandare ha tillgang till och kunna lagga in nummer i databasen?
Om endast en anvandare ska gora det kan du ha foljande teknik:
1. las av i databasen vilka nummer som finns och spara dem i en collection, lista elle hashtable kanske?
Eftersom du har alla databas-nummer i din lista och du vet att du ar den enda som kan lagga in grejer, behover du inte dubbelkolla varje gang i databasen. For varje nytt slumpnummer du lagger in i databasen, lagg till det i din lista ocksa.
2. Det jobbiga ar att kolla av ifall numret redan finns, du far kontrollera varje nummer du slumpar fram ifall det redan finns i din lista. Detta blir jobbigare (for datorn) desto fler nummer du har i din lista da det ar mindre chans att du traffar ett 'ledigt' nummer.
En annan teknik kan vara att du skapar en collectio dar du har slumptal som representerar de riktiga talen. Ex:
slumpa tal 1-10, du har redan tal: 1, 2, 4, 5, 7 i din lista.
Med den forsta tekniken kommer din generator att lyckas slumpa fram de redan upptagna talen, da maste du ignorera dessa och fortsatta med ett nytt. Detta kan ta lang tid nar du bara har 8 och 9 ledigt, da den kan sitte an formiddag och valja allt annat. I teorin kan den sitta och kora 1or i en timme...
Med den andra tekniken ar det annorlunda. i listan har du tal 3, 6, 8, 9 och 10 lediga, varfor inte da bara slumpa ett tal mellan 1 och 5 och lata dem representera lediga tal. far du i denna slumpning 3 reprensenterar den det tredje lediga talet (8). Nu har du bara fyra lediga tal kvar (3, 6, 9, 10) och slumpar da ett tal mellan 1 och 4. Du far 1 och tar da talet 3.
Pa detta sattet slipper du en massa 'doda' iterationer som bara sunkar ner din prestanda.
Kanske blir enklast att ha en collection med lediga tal istallet for upptagna tal?
Blev det helt virrigt nu eller forstar nagon vad jag menade?
mvh
Magnus