2

この配列を 100 回ループしようとしています (0 ~ 99,999 の数値を取得します)。私はいくつかの異なる方法を試しましたが、うまくいきませんでした。ボタンをクリックすると、配列が生成されるように設定しました。次に、ユーザーは数字を入力し、他のボタンを押して、100 個の数字のグループにその数字が何回表示されるかを確認します。それを修正する方法はありますか?私は立ち往生しています。

   Dim i As Integer
    Dim rnd As New Random()
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnter.Click


            Dim num As Integer
            If Int32.TryParse(txtEnter.Text, num) AndAlso num >= 0 AndAlso num < 10 Then
            lblNumber.Text = i.ToString()
            Dim counts = From c In i.ToString()
                         Group By c Into Group
                         Select DigitGroup = New With {.Count = Group.Count(), .Digit = c, .Group = Group}
                         Order By DigitGroup.Count Descending, DigitGroup.Digit
                Dim numCount = counts.FirstOrDefault(Function(grp) grp.Digit.ToString() = num.ToString())
                If numCount IsNot Nothing Then
                    Dim numMessage = String.Format("There are {0} number {1}'s found.", numCount.Count, num)
                    MessageBox.Show(numMessage)
                Else
                    MessageBox.Show("Your number does not contain a " & num)
                End If
            Else
                MessageBox.Show("Please enter a number between 0 and 9.")
            End If

    End Sub

    Private Sub btnGetNumber_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetNumber.Click
        btnEnter.Enabled = True


        i = 0
        Do Until i > 100
            Dim randomInt = rnd.Next(0, 100000)
            i = i + 1
            i = rnd.Next(0, 100000)
        Loop
    End Sub
End Class
4

3 に答える 3

2

まず、ループ回数が分かっている場合は For ループを使うのが一般的です。

次に、until ループで i をインクリメントするのを忘れました

最後に、すべてのループで rnd を再宣言する必要はありません。そのようなものが私には良く聞こえます:

Dim rnd As New Random()

For i = 1 To 100
    Dim randomInt = rnd.Next( 0 , 100000 )
Next
于 2013-03-27T23:56:14.503 に答える
2

New Random()そのループの外に移動します。グローバルにして、インスタンスを 1 回だけ作成します。

(ランダム ジェネレーターは、現在の時間から取得したシードを使用して開始します。ループ内でランダム変数を宣言すると、同じシードが何度も使用されます。これにより、同じ数値が返され、関数のランダム性が無効になります) http: //xkcd.com/221/

ここで別の説明を参照してください

もちろん、iループを制御するために使用する変数をインクリメントしないと、永遠にループします

Dim i As Integer
Dim rnd As New Random()

.....

i = 0
Do Until i > 100
    Dim randomInt = rnd.Next(0, 100000)
    i = i + 1
Loop

そうは言っても、ここで何をしようとしているのかわからない。チェックする配列がなく、ランダム ジェネレーターから取得した値を使用していません。単純に、i変数は値 101 で終了します
。今、私はあなたの意図が何であるかを推測していますが、おそらくこれだけが必要ですか?

i = rnd.Next(0, 100000)

iこれにより、変数に乱数が与えられ、後続のコードで必要な数字がいくつ存在するかがチェックされます。i

于 2013-03-27T23:52:21.820 に答える
1

インクリメントに変数「i」を追加していないことがわかります。

i = 1
Do Until i > 100
        Dim rnd As New Random()
        Dim randomInt = rnd.Next(0, 100000)
        i+=1 'Increment value of i by 1, same as i = i + 1 
Loop

「i」の変数は、インクリメントしない場合は常に 1 です。それを確認して、問題が解決するかどうかをお知らせください。

于 2013-03-27T23:52:30.243 に答える