webForumDet fria alternativet

Random array endast med unika nr

9 svar · 509 visningar · startad av Hakanrode

HakanrodeMedlem sedan jan. 200273 inlägg
#1

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
#2

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
#3

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
#4
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
HakanrodeMedlem sedan jan. 200273 inlägg
#5

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.

HakanrodeMedlem sedan jan. 200273 inlägg
#6

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
#7

Använder du verkligen en ArrayList och inte en Array?

HakanrodeMedlem sedan jan. 200273 inlägg
#8

Hej Vimp!

Så här har jag angett den

    Dim rad(6) As ArrayList
VimpMedlem sedan juli 20022 537 inlägg
#9

Skriv så här istället:

Dim rad As New ArrayList

HakanrodeMedlem sedan jan. 200273 inlägg
#10

Tack Vimp! Det fungerar!

132 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)