2016-07-24 4 views
0

Kann mir bitte jemand sagen, was los ist?Index war außerhalb des Bereichs, muss nicht negativ sein und weniger als die Größe der Sammlung

Ich versuche, eine zufällige Frage in Label1 erscheinen, wenn Button1 gedrückt wird. Ich möchte nur, dass jede Frage einmal erscheint.

Dim Qtn(4) As String 
Private Sub LoadQs() 
    Qtn(0) = "What is 1 + 10?" 
    Qtn(1) = "What is 1 + 11?" 
    Qtn(2) = "What is 1 + 12?" 
    Qtn(3) = "What is 1 + 13?" 
    Qtn(4) = "What is 1 + 14?" 
End Sub 
Private Sub RndQtn() 
    Dim list As New ArrayList 
    For i As Integer = 0 To 4 
     'Add the numbers to the collection. 
     list.Add(i) 
    Next i 
    Dim randomValue As New Random 
    Dim index As Integer 
    Dim item As Object 
    'Display the items in random order. 
    While list.Count > 0 
     'Choose a random index. 
     index = randomValue.Next(0, Qtn.Length) 
     'Get the item at that index. 
     item = list(index) 
     'Remove the item so that it cannot be chosen again. 
     list.RemoveAt(index) 
     'Display the item. 
     Label1.Text = Qtn(item) 
    End While 
End Sub 
+0

Willkommen bei Stack Overflow! Ich habe deine Frage soweit bearbeitet, wie ich dein Problem erraten konnte. Fügen Sie jedoch Code und Beschreibung hinzu, damit mehr Personen mit Wissen über das Thema sie sehen können. Bitte editieren Sie in der spezifischen Fehlermeldung, die Sie antreffen, falls es notwendig ist, das spezifische Problem zu identifizieren. Werfen Sie einen Blick auf [diese Frage] (http://stackoverflow.com/questions/2306742/index-wa-out-of-range-must-bnon-negative-and-less-than-size-of -the-Colle) auch. Viel Glück! – manetsus

Antwort

2

Ich weiß, VB nicht, aber in diesem Code

index = randomValue.Next(0, Qtn.Length) 
    'Get the item at that index. 
    item = list(index) 
    'Remove the item so that it cannot be chosen again. 
    list.RemoveAt(index) 

Sie einen Index sind Erzeugung basierend auf der Länge von Qtn, aber es zu Index in list, die eine andere ist mit Variable. Und weil Sie list.RemoveAt(index) tun, schrumpft list schrumpft, aber Qtn.Length bleibt gleich. Es besteht eine gute Chance, dass randomValue.Next(0, Qtn.Length) Out-of-Bounds-Werte erzeugt, wenn list auf 2 oder 1 Elemente reduziert wird.

+0

Sie haben Recht. Der Fix führt einfach 'randomValue.Next (0, list.Length)' statt, wie Sie darauf hinweisen. –

Verwandte Themen