我有两组锯齿状阵列,名为P1到P6和Z1到Z6,其中的内容是P阵列中的果实和Z阵列中的汽车。我还有一个函数可以从其中一个数组中获取值:
Public Function retL(ByVal L As Array)
Dim maxL As Integer = L.GetUpperBound(0)
Dim numL As Integer = randomizer(maxL)
Dim resL As String = L.GetValue(numL - 1)
Return resL
End Function
L,在上面,由以下代码构成:
Dim L As String = "P" & randomizer(6)
or
Dim L As String = "Z" & randomizer(6)
所以,我的问题是这一切都没有效果。因为L构造为一个字符串,但后来由retL作为一个数组调用,它失败了。如果我尝试将L构造为一个数组,那么它就会失败。如果我尝试将其称为字符串,则会失败。我迷失了,不知道从哪里开始。显然我想做的事情是可能的,但我显然要么错过了一个重要的步骤,要么我没有抓住一些基本的概念。
有什么建议吗?
答案 0 :(得分:1)
你真正想要的是一个数组数组。而不是:
Dim P1(n) As String
Dim P2(n) As String
'...
Dim P6(n) As String
'...
Dim Z6(n) As String
...其中'n'是数组的大小,你应该有更像这样的东西:
Dim P(5, n) As String
Dim Z(5, n) As String
请注意,我使用了5而不是6,因为在VB.Net数组中是零索引,而不是一个索引,而下标是最后一项的索引,而不是项目数。因此Dim P(5, n) As String
为您提供了一个二维字符串数组,在第一维上有六个项目。
现在你的功能应该是这样的:
Public Function retL(ByVal L() As String) As String
Return L(randomizer(L.Length)-1)
End Function
你可以用你当前的代码调用这个函数:
Dim result As String = retL(P(randomizer(6) - 1)
答案 1 :(得分:0)
这是一个litle测试类,它做了几件事
Class TestRandomArrays
Private L As String()
Private randomizer As New Random()
Public Sub InitializeArrayWithRandomLength()
' Creates an array of length between 0 and 5
L = New String(randomizer.[Next](6) - 1) {}
End Sub
Public Sub FillArrayWithRandomText()
For i As Integer = 0 To L.Length - 1
L(i) = "P" & randomizer.[Next]()
Next
End Sub
Public Function ReturnRandomArrayItem() As String
Return L(randomizer.[Next](L.Length))
End Function
End Class
使用array(index)
语法通过索引访问数组项。
Next
方法的括号是因为Next
是VB中的关键字。他们告诉VB编译器Next
是一个标识符而不是关键字。
Random.Next(max)
返回0
和max-1
之间的整数。
New String(n) {}
定义一个索引范围为0..n
的数组,因此定义了一个长度为n+1
的数组。
这不是锯齿状阵列。锯齿状数组是一个数组数组,即结果变量将具有(至少)两个维度。