18. januar 2010 - 11:05Der er
7 kommentarer og 1 løsning
System.Random ser ikke så random ud igen..
Hej.
Jeg er ved at kode et blackjack spil i skolen. Dertil blander jeg kortene ved at generere nogle tilfældige til i et array, mellem 1 og 53 (dvs. t.o.m 52).. Mit array er har 260 pladser fordi jeg vil kunne spille med 5 kortspil efter hinanden, ligesom på et rigtigt kasino. (Det skal blive variabelt senere) Mit problem er, at det ikke ser rigtigt tilfældigt ud.. I mit array ligger der mange steder 2 og 3 ens tal op ad hinanden, og de sidste 3-4 cifre er meget ofte ens... Chancen for 4 ens tal fra 1-52 i rap, er ikke særligt stor... Kan i forklare hvorfor det sker så hyppigt?
Koden:
Dim RandonNumber As New Random() Dim Nummer As Integer Dim AntalKort As Integer = 260 Dim Liste(AntalKort - 1) As Integer Dim Allerede(52) For i = 1 To AntalKort Nummer = RandonNumber.Next(1, 53) For u = 1 To i If Allerede(Nummer) >= 5 Then i -= 1 Exit For End If Next If Allerede(Nummer) < 5 Then Allerede(Nummer) += 1 Liste(i - 1) = Nummer End If Next
Dim a() As Integer = New Integer(5*52) { } For i As Integer = 0 To a.Length - 1 a(i) = i mod 52 + 1 Next Dim rng As Random = New Random Dim b() As Integer = New Integer(5*52) { } For i As Integer = 0 To b.Length - 1 b(i) = rng.Next Next Array.Sort(b, a)
En mulighed for dette kan være at det er fordi random funktionene anvender OS systemets indbygget random og denne er på Vista og XP ikke særlig velegnet til at give en god tilfældighed.
Tak for hjælpen. Det virker meget bedre. Skal bruge det til eksamenen så det er ret vigtigt at jeg forstår koden. Har jeg ret i at For i As Integer = 0 To a.Length - 1 a(i) = i mod 52 + 1 Next Fylder en tabel med tallene 1-52 i rækkefølge og at Dim rng As Random = New Random Dim b() As Integer = New Integer(5*52) { } For i As Integer = 0 To b.Length - 1 b(i) = rng.Next Fylder en tabel med fuldstændigt tilfældige tal.
Array.Sort(b, a)
sortere arrayet, men hvad indikerer de to parametre nøjagtigt?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.