/ / Losowo z listbox - vb.net, losowy

Losowo z listy - vb.net losowo

było wiele postów na ten temat, ale wydaje się, że nikt nie ma mojego problemu.

Mam pole listy z literami a-z (linia dla każdej litery)

za pomocą

    Dim rancon As New Random
Dim rc As Integer = ListBox1.Items.Count
Label5.Text = lcon.Items.Item(rancon.Next(rc)).ToString

wszystko wybiera losowo, 1 z pierwszych 7 lub 8 znaków.

czy ktoś może doradzić?

Odpowiedzi:

1 dla odpowiedzi № 1

Zakładam, że spodziewasz się, że losowy zawsze wybiera inny element w ListBox. Dlatego musisz ponownie użyć tego samego Random instancja, ponieważ wywodzi się z domyślnego konstruktoraziarno (które jest używane do inicjalizacji generatora liczb pseudolosowych) z bieżącego czasu systemowego. Jeśli wywołasz ten kod bardzo szybko (na przykład w pętli), ziarno będzie zawsze takie samo. Stąd otrzymujesz powtarzające się liczby / przedmioty.

Aby tego uniknąć, możesz zrobić Random pole w klasie:

Private rancon As New Random

Public Sub YourMethod()
Dim rc As Integer = ListBox1.Items.Count
Label5.Text = ListBox1.Items(rancon.Next(rc)).ToString()
End Sub

MSDN:

Domyślna wartość początkowa to pochodzi z zegara systemowego i ma skończone rozkład. W rezultacie powstają różne losowe obiekty ścisła sukcesja wywołana przez domyślny konstruktor będzie miała identyczne domyślne wartości nasion i dlatego będą identyczne zestawy liczb losowych. Tego problemu można uniknąć, używając apojedynczy Losowy obiekt do generowania wszystkich liczb losowych. Możesz także obejść modyfikując wartość początkową zwracaną przez zegar systemowy, a następnie jawne podanie tej nowej wartości początkowej losowej (Int32) konstruktor.


Zauważ, że ja też użyłem ListBox1.Items zamiast lcon.Items na wypadek, gdyby to była literówka.