首页 > 解决方案 > VB.NET - 索引数小于索引数组的维数

问题描述

Sub WriteMap()
    Dim CharPos = {1, 1}
    Dim PrintMap As String = ""
    Dim Map(,) As String = {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}

    While True
        Map(CharPos(0))(CharPos(1)) = "X"

        For y = 0 To Map.GetUpperBound(0)
            For x = 0 To Map.GetUpperBound(1)
                PrintMap += $"{Map(y, x)} "
            Next
            PrintMap += vbLf
        Next
        Console.Write(PrintMap)

        Dim Input = Console.ReadKey()
        Console.Clear()
        PrintMap = ""
    End While
End Sub

错误来自 Map(CharPos(0))(CharPos(1)) = "X" 我不知道是什么原因造成的,因为 Map.Rank() 返回 2 我已经四处寻找解决方案,但到目前为止有只找到了打印数组内容的方法,但我找不到编辑数组中现有条目的方法。

标签: vb.net

解决方案


您已声明Map为 2D 数组,但您正在像锯齿状数组一样访问它。这个:

Map(CharPos(0))(CharPos(1)) = "X"

应该是这样的:

Map(CharPos(0), CharPos(1)) = "X"

您这样做的方式是将其视为一维数组的一维数组,而二维数组不是。要将其声明Map为锯齿状数组:

Dim Map(,) As String

必须是这样的:

Dim Map()() As String

推荐阅读