Vb.net Visual Basic-从随机数组中计算数字的出现次数

Vb.net Visual Basic-从随机数组中计算数字的出现次数,vb.net,Vb.net,我需要使用数组和字符串。程序应该只搜索用户将输入的1个数字(0-9)。下面是我的代码。它使用一个数组来获取一个随机数,并测试每个数字的出现情况。然而,它不工作,但我不需要它来测试每一个数字无论如何 程序必须只测试用户请求的1个数字。所以如果生成的随机数是..'7417',并且用户选择了“7”,那么程序将报告出现了两个7。我将使用文本框“txtEnter”获取要搜索的用户号码。有人能帮我吗?谢谢 Private Sub Button1_Click(ByVal sender As System.Ob

我需要使用数组和字符串。程序应该只搜索用户将输入的1个数字(0-9)。下面是我的代码。它使用一个数组来获取一个随机数,并测试每个数字的出现情况。然而,它不工作,但我不需要它来测试每一个数字无论如何

程序必须只测试用户请求的1个数字。所以如果生成的随机数是..'7417',并且用户选择了“7”,那么程序将报告出现了两个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

您的代码有几个问题,但要直接回答缺少的内容:

您应该首先将随机数转换为字符串

 Number= Int(Rnd() * 100000) 
 NumberString = Number.ToString()
将该字符串转换为字符数组

 DigitArray = NumberString.ToCharArray()
然后循环数组的所有字符,并将每个字符
c
转换回整数

 For Each c As Char In DigitArray
     num = c - "0"C`
然后使用该
num
作为
计数
数组的索引

     count(num)+=1       

而不是那可怕的
开关
语句。我让您为这些变量找出正确的
Dim
语句。

您的代码有几个问题,但要直接回答缺少的内容:

您应该首先将随机数转换为字符串

 Number= Int(Rnd() * 100000) 
 NumberString = Number.ToString()
将该字符串转换为字符数组

 DigitArray = NumberString.ToCharArray()
然后循环数组的所有字符,并将每个字符
c
转换回整数

 For Each c As Char In DigitArray
     num = c - "0"C`
然后使用该
num
作为
计数
数组的索引

     count(num)+=1       

而不是那可怕的
开关
语句。我让您为这些变量找出正确的
Dim
语句。

如果您想使用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
Dim rnd作为新随机数()
Dim randomInt=rnd.Next(0,100000)
lblDisplayNumber.Text=randomInt.ToString()
Dim num作为整数
如果Int32.TryParse(txtener.Text,num)和also num>=0和also num<10,则
Dim counts=从c开始,在randomInt.ToString()中
按c分组
使用{.Count=Group.Count(),.Digit=c,.Group=Group}选择DigitGroup=New
按数字组排序。计数递减,数字组。数字
Dim numCount=counts.FirstOrDefault(函数(grp)grp.Digit.ToString()=num.ToString())
如果numCount不是什么,那么
Dim numMessage=String.Format(“找到了{0}个{1}.”,numCount.Count,num)
MessageBox.Show(numMessage)
其他的
MessageBox.Show(“数字不包含”&num)
如果结束
Dim summaryCount=从grp输入计数
选择String.Format(“找到了{0}个数{1}。”,grp.Count,grp.Digit)
Dim summaryMessage=String.Join(Environment.NewLine,summaryCount)
MessageBox.Show(“摘要:”&Environment.NewLine&summaryMessage)
其他的
MessageBox.Show(“请输入一个介于0和9之间的数字”)
如果结束

如果您想使用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
Dim rnd作为新随机数()
Dim randomInt=rnd.Next(0,100000)
lblDisplayNumber.Text=randomInt.ToString()
Dim num作为整数
如果Int32.TryParse(txtener.Text,num)和also num>=0和also num<10,则
Dim counts=从c开始,在randomInt.ToString()中
按c分组
使用{.Count=Group.Count(),.Digit=c,.Group=Group}选择DigitGroup=New
按数字组排序。计数递减,数字组。数字
Dim numCount=counts.FirstOrDefault(函数(grp)grp.Digit.ToString()=num.ToString())
如果numCount不是什么,那么
Dim numMessage=String.Format(“找到了{0}个{1}.”,numCount.Count,num)
MessageBox.Show(numMessage)
其他的
MessageBox.Show(“数字不包含”&num)
如果结束
Dim summaryCount=从grp输入计数
选择String.Format(“找到了{0}个数{1}。”,grp.Count,grp.Digit)
Dim summaryMessage=String.Join(Environment.NewLine,summaryCount)
MessageBox.Show(“摘要:”&Environment.NewLine&summaryMessage)
其他的
MessageBox.Show(“请输入一个介于0和9之间的数字”)
如果结束

如果您只需要找出输入的数字在随机数字中的倍数,那么前面介绍的解决方案似乎有点复杂

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

如果您只需要找出输入的数字在随机数字中的倍数,那么前面介绍的解决方案似乎有点复杂

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

谢谢你的回复,但是哇,我的脑袋在转。我是一个新手程序员,不能完全理解这些。我知道这很悲哀,但我一直被这段代码卡住,无法工作,也无法找出原因issues@BillStack当前位置查看我的编辑,我试图让我的简单解释变得更简单,如果你不理解,我也帮不了你。我尝试过玩这个,但是。。什么都没想到。不过还是谢谢你。我是个迷路的人,我渴望得到答案,但是哇,我的头在转。我是一个新手程序员,不能完全理解这些。我知道这很悲哀,但我一直被这段代码卡住,无法工作,也无法找出原因issues@BillStack当前位置查看我的编辑,我试图让我的简单解释变得更简单,如果你不理解,我也帮不了你。我尝试过玩这个,但是。。什么都没想到。不过还是谢谢你。我是一个迷失的causeThanks,我试图替换您直接发布在案例陈述下面的代码(因此我去掉了下面的其余代码)。我得到了这个错误“局部变量‘counts’已经在当前块中声明了。”我试图摆脱其他counts声明,但它只是创建了更多的错误。你能帮忙吗?这就是我吃的吗