2

我有两组锯齿状数组,分别命名为 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 构造为一个数组开始,它会失败。如果我尝试将其称为字符串,则会失败。我对从这里开始的地方感到迷茫和困惑。显然我正在尝试做的事情是可能的,但我显然也错过了重要的一步,或者我没有掌握一些基本概念。

有什么建议么?

4

2 回答 2

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)
于 2012-10-18T17:58:07.187 回答
0

这是一个做几件事的小测试类

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

这不是锯齿状阵列。锯齿状数组是数组的数组,即结果变量将(至少)具有二维。

于 2012-10-18T18:17:55.683 回答