2

配列と文字列を使用する必要があります。プログラムは、ユーザーが入力する1つの番号(0〜9)を検索する必要があります。これが私のコードです。配列を使用して乱数を取得し、各番号の出現をテストします。ただし、機能していませんが、とにかくすべての番号をテストする必要はありません。

プログラムは、ユーザーが要求する1つの番号のみをテストする必要があります。したがって、生成される乱数が「7417」であり、ユーザーユーザーが「7」を選択した場合、プログラムは2つの7があったことを報告します。テキストボックス「txtEnter」を使用して、検索するユーザー番号を取得します。誰か助けてもらえますか?ありがとう!

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Randomize()
  Dim ArrayNum(1) As Integer
  ArrayNum(0) = Int(Rnd() * 100000)

  lblDisplayNumber.Text = ArrayNum(0)

  Dim num As Integer
  txtEnter.Text = num
  Dim counts = From c In num.ToString()
               Group By c Into Group
               Select DigitGroup = New With {.Count = Group.Count(),
                                             .Digit = c, .Group = Group}
               Order By DigitGroup.Count Descending
               Select String.Format("There are {0} number {1}'s found.",
                                     DigitGroup.Count, DigitGroup.Digit)
  Dim message = String.Join(Environment.NewLine, counts)
End Sub
4

3 に答える 3

2

Linqを使用する場合は、短くて読みやすいです。

Dim counts = From c In num.ToString()
             Group By c Into Group
             Select DigitGroup = New With {.Count = Group.Count(), .Digit = c, .Group = Group }
             Order By DigitGroup.Count Descending
             Select String.Format("There are {0} number {1}'s found.",
                                   DigitGroup.Count, DigitGroup.Digit)
Dim message = String.Join(Environment.NewLine, counts)

更新:これは、入力された番号の結果と要約を示す完全なサンプルです。

Dim rnd As New Random()
Dim randomInt = rnd.Next(0, 100000)
lblDisplayNumber.Text = randomInt.ToString()

Dim num As Integer
If Int32.TryParse(txtEnter.Text, num) AndAlso num >= 0 AndAlso num < 10 Then
    Dim counts = From c In randomInt.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("Number does not contain " & num)
    End If
    Dim summaryCount = From grp In counts
                       Select String.Format("There are {0} number {1}'s found.", grp.Count, grp.Digit)
    Dim summaryMessage = String.Join(Environment.NewLine, summaryCount)
    MessageBox.Show("Summary:" & Environment.NewLine & summaryMessage)
Else
    MessageBox.Show("Please enter a number between 0 and 9.")
End If
于 2013-03-24T18:26:05.363 に答える
1

あなたのコードにはいくつかの問題がありますが、欠けているものに直接答えを与えるために:

最初に乱数を文字列に変換する必要があります

 Number= Int(Rnd() * 100000) 
 NumberString = Number.ToString()

その文字列を文字の配列に変換します

 DigitArray = NumberString.ToCharArray()

次に、配列のすべての文字をループして、各文字cを整数に変換し直します

 For Each c As Char In DigitArray
     num = c - "0"C`

次に、それを配列numのインデックスとして使用しますcounts

     count(num)+=1       

その恐ろしいswitch声明の代わりに。Dimこれらの変数の正しいステートメントを理解させます。

于 2013-03-24T18:16:38.070 に答える
1

入力した数字がランダムな数字で何回あるかを見つける必要がある場合、前に示した解決策は少し複雑に見えます。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' create the data
    Dim nDigits As Integer = 5
    Dim digits(nDigits - 1) As String
    For i = 0 To nDigits - 1
        digits(i) = CInt(Rnd() * 10).ToString
    Next

    ' show the data
    TextBox1.Text = String.Join("", digits)

    Dim inp = InputBox("Enter a number from 0 to 9")

    ' count the occurrences of the entered number
    Dim nFound = digits.Count(Function(d) d = inp)

    MsgBox(String.Format("There are {0} occurrences of {1}.", nFound, inp))

End Sub
于 2013-03-24T19:55:13.333 に答える