【问题标题】:VB.Net Code is not working getting errorVB.Net 代码无法正常工作,出现错误
【发布时间】:2017-02-15 03:33:13
【问题描述】:

有人可以建议,我收到以下 vb.net 代码的编译错误。
VS 突出了一些错误。

  • 索引数小于索引数组的维数。
  • 类型“Integer()”的值无法转换为“Integer(,)”,因为数组类型具有不同的维数。
  • Public Sub Int_SplitEvenOdd_2D_Array(ByRef rawArray(,) As Integer, ByRef evenArray(,) As Integer, ByRef oddArray(,) As Integer)
        Dim firstUpperBound As Integer = rawArray.Length
        Dim secondUpperBound As Integer = rawArray(0).Length
        Dim rows As Integer = 3
        Dim columns As Integer = 2
        evenArray = New Integer((rows) - 1) {}
        oddArray = New Integer((rows) - 1) {}
        Dim i As Integer = 0
        Do While (i <= columns)
            evenArray(i) = New Integer((columns) - 1) {}
            oddArray(i) = New Integer((columns) - 1) {}
            i = (i + 1)
        Loop
    
        Dim value As Integer = 0
        Dim EvenIndex As Integer = 0
        Dim EvenIndex2 As Integer = 0
        Dim OddIndex As Integer = 0
        Dim OddIndex2 As Integer = 0
    
        Do While (i < firstUpperBound)
            Dim j As Integer = 0
            Do While (j < secondUpperBound)
                value = rawArray(i)(j)
                If ((value Mod 2) = 0) Then
                    evenArray(EvenIndex)(EvenIndex2) = (value + 2000)
                    EvenIndex2 = (EvenIndex2 + 1)
                    If (EvenIndex2 = columns) Then
                        EvenIndex2 = 0
                        EvenIndex = (EvenIndex + 1)
                    End If
    
                Else
                    oddArray(OddIndex)(OddIndex2) = (value + 3000)
                    OddIndex2 = (OddIndex2 + 1)
                    If (OddIndex2 = columns) Then
                        OddIndex2 = 0
                        OddIndex = (OddIndex + 1)
                    End If
    
                End If
    
                j = (j + 1)
            Loop
    
            i = (i + 1)
        Loop
    
    End Sub
    
  • 【问题讨论】:

      标签: arrays vb.net indexed


      【解决方案1】:

      您的子例程声明将 evenArray 和 oddArray 声明为二维数组 (,) - 但是,当您在它们上调用 New 时,您将它们重新定义为一维数组 () - 然后再往下将它们视为锯齿状数组。假设您希望它们是多维数组,则需要在调用 New 时为它们提供两个数组边界,并始终使用两个索引 (x,y) 来引用它们。

      evenArray = New Integer(rows - 1, columns -1) {}
      oddArray = New Integer(rows - 1, columns -1) {}
      

      https://msdn.microsoft.com/en-us/library/d2de1t93(v=vs.90).aspx

      正确的声明将消除对以下内容的需要,这是您将它们视为锯齿状数组的地方:

      Do While (i <= columns) 'Also note: This should be the number of rows, not columns if you want to use jagged arrays.
          evenArray(i) = New Integer((columns) - 1) {}
          oddArray(i) = New Integer((columns) - 1) {}
          i = (i + 1)
      Loop
      

      上面实际上是把它们分配成锯齿状数组,它们就像多维数组但不一样(一个像网格,另一个像条形图给你一个直观的表示)如果锯齿状数组是什么你希望他们通常有一个更符合以下内容的声明:

      evenArray = New Integer(rows -1)()
      

      并像这样访问:

      evenArray(row)(column) = value
      

      区别很简单,多维数组实际上是一个 Grid,所有行都有相同的列数。在锯齿状数组中,您的所有行可能有不同数量的列,并且每一行都需要您调用 New 或为其分配一个单维数组(这是您的 for 循环所做的)

      https://msdn.microsoft.com/en-us/library/hkhhsz9t(v=vs.90).aspx

      希望对您有所帮助。 :)

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-08
        • 1970-01-01
        相关资源
        最近更新 更多