2017-02-01 1 views
2

Hallo, alle zusammen.For-Schleife funktioniert nicht richtig, wenn ich Msgbox innerhalb der Schleife hinzufügen

Ich habe kleines Problem, ergab überhaupt keinen Sinn. Ich habe also eine einfache Schleife. Ich möchte zufällige Integer erstellen und den Index eines bestimmten Arrays durch diese ganze Zahl entfernen.

Arbeiten perfekt:

For i = 1 To CInt(rastgelesoru.Text) 
      Dim Rand As New Random() 
      Dim xIndex As Integer = Rand.Next(0, AList.Count - 1) 
      Dim SelectedValue = AList(xIndex) 
      Dim eklepanelrnd As Panel = CType(containerpanel.Controls(SelectedValue), Panel) 
      If eklepanelrnd.Tag = "1" Then 
       MsgBox(xIndex) 
       containerpanelrastgele.Controls.Add(eklepanelrnd) 
      End If 
      AList.RemoveAt(xIndex) 
    Next 

Zum Beispiel habe ich 500 Element in Array. Wenn ich eine Nachrichtenbox wie oben hinzugefügt habe, funktioniert es perfekt. Ich bekomme Zufallszahlen. (100,65,355,27,472 letzte Ausgabe für 5). Aber wenn ich msgbox Zeile entferne, bekomme ich jedes Mal fortlaufende Nummern. Zuerst dachte ich, es könnte wirklich 'zufällig' sein, aber nein. Jedes Mal, wenn ich Konsekutivpersonen bekomme. (23,24,25,160,161 letzte Ausgabe für 5 ohne msgbox Linie.)

Nicht richtig funktioniert ohne msgbox Linie.

For i = 1 To CInt(rastgelesoru.Text) 
      Dim Rand As New Random() 
      Dim xIndex As Integer = Rand.Next(0, AList.Count - 1) 
      Dim SelectedValue = AList(xIndex) 
      Dim eklepanelrnd As Panel = CType(containerpanel.Controls(SelectedValue), Panel) 
      If eklepanelrnd.Tag = "1" Then 

       containerpanelrastgele.Controls.Add(eklepanelrnd) 
      End If 
      AList.RemoveAt(xIndex) 
    Next 
+1

Erstellen Sie keine zufälligen Objekte in Ihrer Schleife, sondern erstellen Sie nur eine. Also bewegen Sie Dim Rand als neue Random() 'vor der Schleife. –

+0

@AlexB. Oh lustig, wie einfach es ist. Arbeiten jetzt danke. Aber könnten Sie bitte mehr erklären? Ich würde gerne wissen, warum ich nicht das gleiche Problem hatte, wenn ich msgbox in Schleife hatte. –

+1

Im Grunde ist es wegen .NET berechnet Zufallszahlen mit einem [Zufallsgenerator] (http://en.wikipedia.org/wiki/Pseudorandom_number_generator). Dies bedeutet, dass die Zahlen mit einem deterministischen Algorithmus erzeugt werden und somit nicht zu 100% zufällig sind. Eine gängige Methode, diese statistischen Ergebnisse zu verschleiern, besteht darin, den aktuellen Zeitstempel zu berücksichtigen. In Ihrem Beispiel mit MsgBox sind die Zeitstempel eher unterschiedlich, weil Sie das Fenster zuerst schließen müssen, wobei in Ihrem zweiten Beispiel der Zeitstempel zwischen den zufälligen Objekten fast identisch ist. –

Antwort

1

@AlexB. auf Kommentare.

Erstellen Sie keine zufälligen Objekte in Ihrer Schleife, sondern erstellen Sie nur eine. Also bewege Dim Rand als neue Random() vor der Schleife.

Arbeiten perfekt jetzt. Danke < 3 Einen schönen Tag haben.

Verwandte Themen