0

I am trying to write a Role-Playing Dice subprogram. I am using Visual Studio 2010 writing in Visual Basic. All syntax according to Visual Studio is correct. The form looks as follows:

When you click numerical buttons with value of either a "1" or "null" for the # of Dice text boxes it will roll one dice and give you one random value depending on which numerical button you click. If you put a value of 2 or greater then the program stops and gives me the following exception error.

I have done the research and think that the code is written correct but for some reason value are not making it into the array. Would like to know how to make the value enter the array and make the program recognize that more than one dice is being rolled. Below is a copy of the code for one of the button.

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
1
  • While being unfamiliar with vb.net my guess would be that you failed to initialize iarray in a correct manner. Dim v, w, x, y, z, iarry(x) As Integer x might be zero so the length of your array should as well be zero. Since the only part you access that array is when x != 1 that should be it. Commented Aug 11, 2012 at 8:43

2 Answers 2

3

You are declaring your array iarry here:-

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

This will have the effect of declaring the array to have no elements. You need, as soon as the value of x is known, to

ReDim iarry(x)

Edit perusing your code a little more carefully, it seems you may need

ReDim iarry(x + 1)

Dimensioning an array of x elements gives you elements 0, 1, 2, ..., x-1.

Sign up to request clarification or add additional context in comments.

1 Comment

In VB, x would be the upper bound of the array, not the length. So if x is 0, then the array would have one element. If you need an array with 10 items, it would be declared as iarry(9).
1

I recomend you change the array and use list(of integer), it's easyer to work with and you don't need to initialize the number of items of the list.

Edit:

Here are a version of your code, i don't know if is this what you want.

 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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.