0

「SelectName()」サブにないコードの一部に問題がある場合に備えて、ここにすべてのコードをスローします。

Module Module1
    Dim selectednames As String = ""
    Dim index As Short = 0
    Dim inarray As Boolean = False
    Dim amountofkeys As Short
    Dim namesarray() As String
    Dim names As String = ""
    Dim input As String = ""
    Dim totalnames As Short = 0
    Dim indexofcomma As Short = 0

    Sub Main()
        Console.Write("Howmany keys are there to be given away? ")
        amountOfKeys = CShort(Console.ReadLine())
        Start()
        While Not amountofkeys = -1
            SelectName(names, totalnames)
            amountofkeys = amountofkeys - 1
        End While
        Console.Write("The winners are: " & selectednames)
        Console.ReadLine()
    End Sub

    Sub SelectName(ByVal names As String, ByVal totalnames As Short)
        ReDim namesarray(totalnames - 1)
        If inarray = False Then
            For x = 0 To totalnames - 1
                indexofcomma = InStr(names, ",")
                namesarray(x) = Left(names, indexofcomma - 1)
                names = Mid(names, indexofcomma + 1, (Len(names)))
            Next
            inarray = True
        End If
        Randomize()
        index = Int(Rnd() * (totalnames - 1))
        For x = 0 To totalnames - 1
            Debug.Print("namesarray(" & x & ") = " & namesarray(x))
        Next
        selectednames &= namesarray(index) & " "
        movenames()
    End Sub

    Sub movenames()
        For x = index To totalnames - 1
            namesarray(index) = namesarray(index + 1)
        Next
        totalnames -= 1
    End Sub

    Sub Start()
        Console.WriteLine("Enter all the viewer's names, one by one.")
        Console.WriteLine("Once all names have been entered, press 0.")
        input = Console.ReadLine()
        While Not input = "0"
            names &= input & ","
            totalnames += 1
            input = Console.ReadLine()
        End While
    End Sub
End Module

これがそれが何をするかの画像です(私はあなたが何がうまくいかなかったかを見ることができると思います)

13の入力、3つの出力が期待され、1つの出力のみが与えられます。 間違った出力

何が悪いのかを見つけるのを手伝ってくれる人がいる可能性はありますか?

これまでのところ、正しい量のループなどを実行しています。2番目のゲームキーの「勝者」の生成を開始するとすぐに、namesarrayから文字列値を取得しません。

また、なぜですか

For x = 0 To totalnames - 1
            Debug.Print("namesarray(" & x & ") = " & namesarray(x))
        Next

デバッグ出力が表示されませんか?

4

2 に答える 2

1

主なエラーはここにあります

    For x = index To totalnames - 1
        namesarray(index) = namesarray(index + 1)
    Next

私はあなたがこのようにすべきだと思います

    For x = index To totalnames - 1
        namesarray(x) = namesarray(x + 1)
    Next

また、namesarrayの最大値と等しくなると、ランダムインデックスによってコードがクラッシュすることに注意してください。(例:結果がindex = 5の場合totalnames=6index = Int(Rnd() * (totalnames - 1))movenamesがクラッシュします)

Debug.Printの出力は、コードによって開かれたコンソールウィンドウではなく、イミディエイトウィンドウまたは出力ウィンドウに送られます。そのためにConsole.Writelineを使用します。

于 2012-06-14T12:10:59.570 に答える
1

問題を単純化します。

名前をList(Of String)にし、文字列に「、name」を追加する代わりに、を使用しますnames.Add(namereadfromconsole)。名前の文字列をループする代わりに、単純なnames.Contains(thename)inArrayを使用しているフラグを置き換えることができます。そして、movenames()呼び出す代わりに、単純なnames.Remove(nametoremove)

Debug.Print()呼び出しで何も表示されない場合は、[オプション]->[デバッグ]->[一般]->[x]で、すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトしてください。

于 2012-06-14T12:00:16.403 に答える