Mein Ziel ist es, eine Liste mit einer bestimmten Größe zu erstellen und 3 Punkte zufällig aus dieser Liste auszuwählen. Sobald ein Punkt ausgewählt ist, wird er aus der Liste gelöscht, damit er nicht erneut ausgewählt wird. Mein Problem ist der Debugger sagt, ich habe einen Index außerhalb des Bereichs der Liste. Ich bin relativ neu in VB.NET, bin aber ziemlich erfahren mit VBA. Vielen Dank im Voraus für Ihre Hilfe.VB.NET; Indexfehler mit zufällig generierter Liste
Private Sub Analyze_Click(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles Analyze_Image.Click
Dim i As Long, j As Long, k As Long, Image_Width As Long, Image_Height As Long, Pixel_Count As Long, Pixel As Long
Dim My_Image As Image
Dim RandomClass As New Random()
Dim RandomIndex_1 As Long, RandomIndex_2 As Long, RandomIndex_3 As Long
Dim P1 As Point, P2 As Point, P3 As Point
My_Image = My_PictureBox.Image
Image_Width = My_Image.Width
Image_Height = My_Image.Height
Pixel_Count = Image_Width * Image_Height
Dim Numbers = Enumerable.Range(0, Pixel_Count + 1).ToList()
For Pixel = 1 To Pixel_Count
RandomIndex_1 = RandomClass.Next(0, Numbers.Count)
Numbers.RemoveAt(RandomIndex_1)
RandomIndex_2 = RandomClass.Next(0, Numbers.Count)
Numbers.RemoveAt(RandomIndex_2)
RandomIndex_3 = RandomClass.Next(0, Numbers.Count)
Numbers.RemoveAt(RandomIndex_3)
i = Numbers(RandomIndex_1)
j = Numbers(RandomIndex_2)
k = Numbers(RandomIndex_3)
If i Mod Image_Width = 0 Then
P1.X = Image_Width
Else
P1.X = i Mod Image_Width
End If
If j Mod Image_Width = 0 Then
P2.X = Image_Width
Else
P2.X = j Mod Image_Width
End If
If k Mod Image_Width = 0 Then
P3.X = Image_Width
Else
P3.X = k Mod Image_Width
End If
If ((i - i Mod Image_Width)/Image_Width) + 1 = Image_Height + 1 Then
P1.Y = Image_Height
Else
P1.Y = ((i - i Mod Image_Width)/Image_Width) + 1
End If
If ((j - j Mod Image_Width)/Image_Width) + 1 = Image_Height + 1 Then
P2.Y = Image_Height
Else
P2.Y = ((j - j Mod Image_Width)/Image_Width) + 1
End If
If ((k - k Mod Image_Width)/Image_Width) + 1 = Image_Height + 1 Then
P3.Y = Image_Height
Else
P3.Y = ((k - k Mod Image_Width)/Image_Width) + 1
End If
Next
End Sub
es wäre wahrscheinlich hilfreich sein, um anzuzeigen, welche Linie die Ausnahme auslöst, aber es sieht aus wie Sie fro Artikel entfernt werden m die Liste ('Numbers.RemoveAt (RandomIndex_1)') und versuche dann, sie zu lesen ('i = Numbers (RandomIndex_1)'). – Mark
Es sieht auch so aus, als müssten Sie '3 * Pixel_Count'-Elemente in Ihrer' Number'-Liste verwenden? – Mark
Überraschend einfache Korrekturen, ich weiß nicht, wo mein Gehirn heute ist. Hat beide diese Änderungen gemacht und es funktioniert jetzt. Vielen Dank! – senuba91