0

我正在尝试编写角色扮演骰子子程序。我正在使用 Visual Studio 2010 编写 Visual Basic。根据 Visual Studio 的所有语法都是正确的。表格如下所示:

当您在# of Dice 文本框中单击值为“1”或“null”的数字按钮时,它将掷一个骰子并根据您单击的数字按钮为您提供一个随机值。如果您输入 2 或更大的值,则程序停止并给我以下异常错误。

我已经完成了研究,并认为代码编写正确,但由于某种原因,值没有进入数组。想知道如何使值进入数组并使程序识别出不止一个骰子正在滚动。下面是其中一个按钮的代码副本。

Private Sub btnD4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnD4.Click
    Dim v, w, x, y, z, iarry(x) As Integer
    lvRolls.Items.Clear()
    If txt4Qty.Text = vbNullString Then
        x = 1
    Else
        x = CInt(txt4Qty.Text)
    End If
    If x = 1 Then
        z = CInt(Int(Rnd() * 5))
        If z > 4 Then
            z = 4
        ElseIf z < 1 Then
            z = 1
        End If
        lvRolls.Items.Add("Roll 1")
        lvRolls.Items(0).SubItems.Add(CStr(z))
        If txt4Mod.Text = vbNullString Then
            lblTotal.Text = CStr(z)
        Else
            w = CInt(txt4Mod.Text)
            lblTotal.Text = CStr(z + w)
        End If
    Else
        For y = 0 To x Step 1
            z = CInt(Int(Rnd() * 5))
            If z > 4 Then
                z = 4
            ElseIf z < 1 Then
                z = 1
            End If
            iarry(y) = z
        Next
        For v = 0 To x
            lvRolls.Items.Add("Roll " & v + 1)
            lvRolls.Items(x).SubItems.Add(CStr(iarry(y)))
        Next
    End If
End Sub
4

2 回答 2

3

你在这里声明你的数组iarry: -

Dim v, w, x, y, z, iarry(x) As Integer

这将具有声明数组没有元素的效果。一旦知道 x 的值,您就需要

ReDim iarry(x)

编辑仔细阅读您的代码,看来您可能需要

ReDim iarry(x + 1)

对元素数组进行标注可以x为您提供元素0, 1, 2, ..., x-1

于 2012-08-11T08:40:21.817 回答
1

我建议您更改数组并使用 list(of integer),它更容易使用,并且您不需要初始化列表的项目数。

编辑:

这是您的代码的一个版本,我不知道这是否是您想要的。

 Private Sub btnD4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnD4.Click

    Dim x As Integer = CInt(If(txt4Qty.Text <> vbNullString, txt4Qty.Text, 1))
    Dim iarry As New List(Of Integer)

    lvRolls.Items.Clear()

    If x = 1 Then

        Dim z As Integer

        z = (New Random).Next(1, 4)

        lvRolls.Items.Add("Roll 1")
        lvRolls.Items(0).SubItems.Add(z.ToString)

        If txt4Mod.Text = vbNullString Then
            lblTotal.Text = z.ToString
        Else
            lblTotal.Text = (z + CInt(txt4Mod.Text)).ToString
        End If

    Else

        Dim i As Integer

        For i = 0 To x
            iarry.Add((New Random).Next(1, 4))
        Next

        For v = 0 To x

            Dim t_item As New ListViewItem("Roll " & v + 1)

            lvRolls.Items.Add(t_item)

            t_item.SubItems.Add(CStr(iarry(v)))

        Next

    End If
End Sub
于 2012-08-14T20:38:46.950 回答