0
我已經寫了一個2D陣列旋轉工作得很好,但是我有一個點集中在陣列上的單個位置並顯示「!」而不是顯示數組時的數字。2D陣列旋轉和旋轉vb.net中的一個點
我曾經想過,如果我在數組旋轉過程中檢查了點,然後將點位置更改爲新的數組位置,則焦點將與數組一起旋轉,但是,新點位置不會匹配旋轉的點。
在這個例子中,我將重點放在數字「5」(位置1,1)上,並且應該始終顯示「!」而不是「5」。
此旋轉適用於焦點0,0,但不適用於其他點。有人可以指出我做錯了什麼,並解釋爲什麼邏輯不總是工作?
Public Module Module1
Dim focalX As Integer = 1
Dim focalY As Integer = 1
Sub Main()
Dim src(,) As String =
{
{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"},
{"0", "1", "2"}
}
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
Console.WriteLine()
Console.WriteLine("Press Enter to exit...")
Console.ReadLine()
End Sub
Sub ShowArray(src(,) As String)
Console.WriteLine(focalX & ", " & focalY)
For i = 0 To src.GetUpperBound(0)
For j = 0 To src.GetUpperBound(1)
If focalX = j And focalY = i Then
Console.Write("!" & " ")
Else
Console.Write(src(i, j) & " ")
End If
Next
Console.WriteLine()
Next
Console.WriteLine()
End Sub
Function RotatedCW(src(,) As String) As String(,)
Dim maxX As Integer = src.GetUpperBound(0)
Dim maxY As Integer = src.GetUpperBound(1)
Dim newArray(maxY, maxX) As String
For i = 0 To maxX
For j = 0 To maxY
newArray(j, maxX - i) = src(i, j)
If focalX = j And focalY = i Then
focalX = maxX - i
focalY = j
End If
Next
Next
Return newArray
End Function
End Module
謝謝!只是看到你們終於讓我意識到我做錯了 - 把它放在循環中,所以當它旋轉(正確)並且循環遇到新的旋轉位置時,它再次應用相同的數學運算,並將它發送到意外的地方。 – Fozzedout