Gå til innhold

VB 2005, fylle listbox med random numre?


Anbefalte innlegg

Hei!

 

Jeg har en tallrekke f.eks 0 til gloser.items.count sant!?

 

Det jeg vil er at en random funsjon skal trekke ut tall innenfor den rekken, og putte det inni en annen listbox kalt randomlist.

Tallene kan ikke forekomme 2 ganger, så når den finner et random tall mellom angitte verdier.. må den kryss referere med resten av tallene i randomlisten for å hindre at tallet forekommer 2 ganger.. skjønner?

 

Dette er det jeg har laget selv: (å ikke klag på at jeg bruker Goto :p )

Public Sub makeran()
       randomlist.Items.Clear()
       Dim i As Integer = 0
       Dim u As Integer = 0
       Dim num As Integer = 0
       Dim o As Integer = 0
       Dim ran As New Random

       For i = 0 To gloser.Items.Count - 1
           num = ran.Next(0, gloser.Items.Count)
           If randomlist.Items.Count = 0 Then
               randomlist.Items.Add(num)
               GoTo hihi
           End If
haha:
           For u = 0 To randomlist.Items.Count - 1

               num = ran.Next(0, gloser.Items.Count)
               If num = randomlist.Items.Item(u) Then
                   GoTo haha
               Else
                   o += 1
               End If
           Next
           If o > 0 Then
               randomlist.Items.Add(num)
           End If
hihi:
       Next
       Dim p As Integer = 0
       For p = 0 To randomlist.Items.Count - 1
           Debug.WriteLine(randomlist.Items.Item(p))
       Next
   End Sub

 

Det over funker neeeeesten... bare at samme tall forekommer flere enn en gang i listen?

 

Forklare en gang til litt bedre... :p

 

Vi har en tallrekke... 1-10

Jeg vil at de skal puttes inn i randomlist i random rekkefølge? det hva kort og enkelt hæ :p ?

 

Tusen Tusen takk for hjelp :):innocent:

Lenke til kommentar
Videoannonse
Annonse

Beklager, jeg kan ikke ha tenkt helt klart når jeg skrev den kodesnutten. Her er en som funker, så sant du har en listbox med navnet "Randomliste", og en med navnet "Gloser":

    Private Sub Trekk()
       Dim i As Integer
       Dim glose As String

       RandomListe.Items.Clear

       Do Until RandomListe.Items.Count = Gloser.Items.Count

           Randomize()
           glose = Gloser.Items(Int(Rnd() * Gloser.Items.Count))

           For i = 0 To RandomListe.Items.Count - 1
               If RandomListe.Items(i) = glose Then
                   GoTo neste
               End If
           Next i

           RandomListe.Items.Add(glose)

neste:
       Loop

   End Sub

Endret av Degeim
Lenke til kommentar

Det gjør den ikke hos meg. Er du sikker på at du har den riktige koden? Her er den, i alle fall:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim i As Integer
       Dim glose As Integer

       RandomListe.Items.Clear()

       Do Until RandomListe.Items.Count = Gloser.Items.Count

           Randomize()
           glose = Int(Rnd() * Gloser.Items.Count)

           For i = 0 To RandomListe.Items.Count - 1
               If RandomListe.Items(i) = glose Then
                   GoTo neste
               End If
           Next i

           RandomListe.Items.Add(glose)

neste:
       Loop

   End Sub

Endret av Degeim
Lenke til kommentar
Det gjør den ikke hos meg. Er du sikker på at du har den riktige koden? Her er den, i alle fall:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim i As Integer
       Dim glose As Integer

       RandomListe.Items.Clear()

       Do Until RandomListe.Items.Count = Gloser.Items.Count

           Randomize()
           glose = Int(Rnd() * Gloser.Items.Count)

           For i = 0 To RandomListe.Items.Count - 1
               If RandomListe.Items(i) = glose Then
                   GoTo neste
               End If
           Next i

           RandomListe.Items.Add(glose)

neste:
       Loop

   End Sub

5600909[/snapback]

 

Jeg ikke hva jeg fortudla til :p

Men den funker no... tusen tusen tusen takk :D

Lenke til kommentar

Svaret til degeim kan i teorien gå i uendelig løkke. Denne er bedre og kjappere (den har bare en løkke som traverseres en gang):

 

       
       Dim i As Integer
       Dim gloseIndex As Integer
       Dim arrayList As ArrayList

       RandomListe.Items.Clear()
       Randomize()
       arrayList = New ArrayList(Gloser.Items)
       For i = 0 To arrayList.Count - 1
           gloseIndex = Int(Rnd() * arrayList.Count)
           RandomListe.Items.Add(arrayList(gloseIndex))
           arrayList.RemoveAt(gloseIndex)
       Next

 

Øyvind

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...