0

Role-Playing Dice サブプログラムを作成しようとしています。Visual Basic で Visual Studio 2010 を使用しています。Visual Studio に従ったすべての構文は正しいです。フォームは次のようになります。

# of Dice テキスト ボックスの値が「1」または「null」の数字ボタンをクリックすると、1 つのサイコロが振られ、クリックした数字ボタンに応じて 1 つのランダムな値が与えられます。2 以上の値を入力すると、プログラムが停止し、次の例外エラーが表示されます。

私は調査を行い、コードは正しく書かれていると思いますが、何らかの理由で値が配列に含まれていません。値を配列に入れて、複数のサイコロが振られていることをプログラムに認識させる方法を知りたいです。以下は、ボタンの 1 つのコードのコピーです。

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)

要素の配列をディメンション化すると、xelements が得られます0, 1, 2, ..., x-1

于 2012-08-11T08:40:21.817 に答える
1

配列を変更して(整数の)リストを使用することをお勧めします。操作が簡単で、リストの項目数を初期化する必要はありません。

編集:

これがあなたのコードのバージョンです、これがあなたが望むものであるかどうかはわかりません。

 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 に答える