Hej!
Skrev den här frågan inne på visual basic för ett par dagar sedan men har inte fått något svar därför hoppas jag att det är okej att jag frågar här också.
Skulle uppskatta enormt om någon kunde ge mig ett förslag på en loop som slumpar fram unika tal att lägga i en array.
I mitt fall skall talen vara inom 1 - 35 och Arrayen 7 platser stor. Men det har jag ju redan klart. Men hur ser jag till att inte få samma tal framslumpat 2 ggr i samma "slumpning"?
Jättetacksam för svar!
CiliaxMedlem sedan jan. 2004170 inlägg hmmm Låter som en standard skoluppgift där man ska skapa en lottorad.
Kan jag ha rätt i mina misstankar? :)
Vilket språk använder du?
GladhMedlem sedan maj 20012 812 inlägg Det finns lite olika sätt. Ett är att kontrollera så att det nummer du får inte redan finns slumpad. Det gör man genom att spara ner alla slumpade tal i en array och sedan när man slumpar ut ett nytt tal så kollar man i array att talet inte finns och lägger till det, om det finns så slumpar man ett nytt. Som du förstår så är det inte så effektivt.
Ett annat alternativ är att du skapar en arry som innehåller 35 poster: Talet 1-35.
Sedan så skapar du en randomizer som slumpar ett tal mellan 0 och längden på din array (som just nu är 35). När du sedan slumpar ut ett tal så plockar du ut den posten från array vilket gör att du nu endast har 34 poster , du spara det tal som du plockat ut från arrayn i en ny array som tar 7 poster.
När du sedan slumpar nästa gång så har du endast 34 poster och kan alltså inte få samma post 2 gånger. Så fortsätter du tills du plockat ut 7 poster.
- Magnus
DinoMedlem sedan sep. 20011 914 inlägg public void LottoMachine()
{
ArrayList col = new ArrayList();
Random rnd = new Random();
for(int i = 0; i < 7; i++)
{
int x;
do
{
x = rnd.Next(1, 36);
}
while(col.Contains(x));
col.Add(x);
}
foreach(int i in col)
Response.Write(i.ToString() + "<br/>");
}
Public Sub LottoMachine()
Dim col As New ArrayList()
Dim rnd As New Random()
Dim i As Integer
For i = 0 To 6
Dim x As Integer
Do
x = rnd.Next(1, 36)
Loop While col.Contains(x)
col.Add(x)
Next i
Dim i As Integer
For Each i In col
Response.Write((i.ToString() + "<br/>"))
Next i
End Sub 'LottoMachine
Tack alla för de kloka svaren!
Och nej, det är faktiskt ingen skoluppgift!
Tack Gladh för att du satte in mig i ett bra tankesätt, det kan vara värdefullt även senare.
Hej igen,
jag försökte med en bit av Dinos kod men kompilatorn säger att contains och add is not a member of system.array.
Vad har jag glömt?
VimpMedlem sedan juli 20022 537 inlägg Använder du verkligen en ArrayList och inte en Array?
Hej Vimp!
Så här har jag angett den
Dim rad(6) As ArrayList