0
내 목표는 특정 크기의 목록을 만들고 해당 목록에서 3 점을 무작위로 선택하는 것입니다. 한 지점을 선택하면 목록에서 삭제되어 다시 선택되지 않습니다. 내 문제는 디버거가 목록 범위 밖의 인덱스가 있다고 말하고 있습니다. 저는 VB.NET에 비교적 익숙하지 않지만 VBA에 꽤 경험이 있습니다. 당신의 도움에 미리 감사드립니다. 질문에 대한 의견뿐만 아니라VB.NET; 임의로 생성 된 목록의 색인 오류
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
아마도 라인은 예외를 던지는 표시하는 것이 도움이 될 것입니다,하지만 당신은 이리저리 항목을 제거하는 것 같습니다 m 개의리스트 ('Numbers.RemoveAt (RandomIndex_1)')를 읽은 다음 ('i = Numbers (RandomIndex_1)') 그들을 읽으려고합니다. – Mark
'Number'리스트에'3 * Pixel_Count' 항목이 필요한 것 같습니다. – Mark
놀랍게도 간단한 수정으로, 나는 내 뇌가 오늘날 어디 있는지 알지 못합니다. 그 두 가지 변화를 만들어 냈고 지금도 효과가 있습니다. 감사! – senuba91