Random number

Status
Niet open voor verdere reacties.

Jensvde

Gebruiker
Lid geworden
20 nov 2010
Berichten
387
Hallo iedereen,

Ik ben een programma aan het maken om een nummer te maken, van 1 tot 4. Dit kan bruikbaar zijn om bijvoorbeeld te beslissen wie deze week de vuilniszakken moet buiten zetten. Nu heb ik iets als dit:
Code:
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Randomize()
        Dim value As Integer = CInt(Int((4 * Rnd()) + 1))
        Label6.Text = value
        If Label6.Text = "1" Then
            Label5.Text = Label1.Text
        End If
        If Label6.Text = "2" Then
            Label5.Text = Label2.Text
        End If
        If Label6.Text = "3" Then
            Label5.Text = Label3.Text
        End If
        If Label6.Text = "4" Then
            Label5.Text = Label4.Text
        End If
    End Sub
End Class
Maar hij pakt veel de dezelfde nummers achterelkaar. Hoe kan ik dit oplossen? De labels 1,2,3 & 4 staan voor namen.

Alvast bedankt voor jullie hulp!


Jens
 
De kans is 1 op 4 dus je gaat altijd wat gelijke reeksen krijgen. Als je wat meer entropie wil kun je eerst 100 nummers "weggooien" (for loopje waar je eerst 100 nummers trekt waar je niets mee doet). Dat gaat wellicht wat helpen. Maar als je 10x een 4-zijdige dobbelsteen gooit ga je bijna altijd wel een keer 2x dezelfde achter elkaar krijgen. Als je dat niet wilt kun je beter een lijst "shuffelen" dan weet je zeker dat iets niet 2x terug komt binnen dezelfde lijst
 
Ja dat kan ik misschien wel eens proberen. Kan je misschien de code ook posten?
 
Dit voorbeeld is wat overkill voor wat je wil doen, maar ik heb het even uit een bestaand projectje geknipt:

Code:
        Randomize()

        Dim namen As List(Of String) = New List(Of String)
        Dim resultaat As List(Of String) = New List(Of String)
        Dim randje As Random = New Random()
        Dim selectie As Integer

        namen.AddRange({"henk", "piet", "klaas", "jan"})

        For i As Integer = 1 To namen.Count
            selectie = randje.Next(namen.Count)
            resultaat.Add(namen(selectie))
            namen.RemoveAt(selectie)
        Next

        MessageBox.Show(Join(resultaat.ToArray(), " "))
 
Bedankt voor het antwoord! Ik heb het zonet getest, maar ik krijg een fout:

Error 1 Expression expected.
Error 2 Comma, ')', or a valid expression continuation expected.

Ik krijg deze fout in de volgende lijn:
Code:
namen.AddRange ({"henk", "piet", "klaas", "jan"})
 
Afhankelijk van welke VS je gebruikt kan het zijn dat je een using statement mist over generics. In principe is het geen probleem en kun je de namen 1 voor 1 toevoegen:


namen.add("henk")
namen.add("piet")
etc.

gebruik je een visual studio ouder dan 2010?
 
Ik gebruik idd een oudere versie dan 2010, ik gebruik Visual Basic 2008 Express. Ik vindt het makkelijker dan de 2010 versie, maar het wordt precies tijd dat ik begin te denken aan een upgrade :)
 
Ik heb Visual Basic 2010 Express geinstalleerd, maar nu krijg ik altijd de vier namen in een keer in een msgbox. Het is toch de bedoeling dat hij een van die vier kiest, niet allemaal. Ik heb een screenshot bijgevoegd, dan kan je het zien.vberror.jpg
 
Klopt, dat is om te demonstreren dat de lijst elke keer een andere volgorde heeft en dat de namen altijd maar 1 keer voor komen.

Je kunt de lijst ook 1 voor 1 nu doorlopen op elke manier die je wil:

Code:
for each naam as string in resultaat
   messagebox.show(naam) '1 voor 1 door de namen lopen met for each
next naam

messagebox.show(resultaat(0)) ' eerste naam uit de lijst nemen
messagebox.show(resultaat(1)) ' tweede naam nemen
messagebox.show(resultaat(2)) ' derde naam
messagebox.show(resultaat(3)) ' vierde naam

In principe kun je dus elk resultaat nemen dat je wilt op deze manier of zelfs het rooster voor 4 weken vastleggen zonder kans dat de naam dubbel voorkomt
 
Bedankt voor het antwoord! Maar is het ook mogelijk om alleen 1 naam weer te geven? Daar ben ik eigenlijk naar opzoek
 
Ah ja nu zie ik het. :o Heel erg bedankt voor je hulp, ik denk dat het hiermee wel zal lukken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan