我正在制作一个彩票计划,其中包含一个清单框中的99个复选框。然后我在标签中生成5个随机的唯一数字。我是否最好使用嵌套的If语句来检测我选择的任何数字是否与任何生成的数字匹配,或者其他更好的东西?这就是我正在使用的不起作用。
Dim Matched As Integer = 0
If PickedNumbers.Contains(value) Then Matched += 1
值包含随机数,PickedNumbers是我在checklistbox中选择的数字。
更新:
For Each n As Int32 In WinMatches
WinningNumbers.Text = ("We matched on:" & " " & n & "!")
Next
我只能得到这个以返回1个匹配的号码。
答案 0 :(得分:1)
不要将标签用于显示中奖号码以外的任何其他内容,特别是因为如果您将所有获胜者粘合成一个字符串(根据您的上一个问题),它不会是原子的。 CheckedItems
集合将包含数据,但是作为文本,因此您需要将它们转换为整数以进行比较:
Dim winners = Enumerable.Range(1, 99).OrderBy(Function(r) RNG.Next()).Take(5).ToArray
lblWinners.Text = String.Join(", ", winners)
Dim pick As Int32
Dim Matches As Int32
For n As Int32 = 0 To clbPicks.CheckedItems.Count - 1
pick = Convert.ToInt32(clbPicks.CheckedItems(n))
If (winners.Contains(pick)) Then
Matches += 1
End If
Next
如果你喜欢单行的内容:
Dim WinMatches = clbPicks.CheckedItems.Cast(Of String).
Where(Function(m) winners.Contains(Convert.ToInt32(m))).
ToArray()
Dim winValues = Array.ConvertAll(WinMatches, Function(i) Convert.ToInt32(i))
这也将为您提供在WinMatches
中匹配的项目/选择(尽管是字符串)。下一行将它们转换为整数值。结果:
For Each n As Int32 In WinMatches
Console.WriteLine("Winner-Winner, Chicken Dinner on {0}", n)
Next
获奖者 - 获奖者,7日鸡肉晚餐 获奖者,18岁的鸡肉晚餐 获奖者,40岁的鸡肉晚餐
答案 1 :(得分:0)
您可以使用For Each
语句。
示例强>
这将查看每个复选框,并检查是否已选中,是否“执行某些操作”。您可以将每个复选框值放在其Text属性中,然后使用它来计算出已选择的值。
Dim cControl As Control
For Each cControl InMe.Controls
If (TypeOf cControl Is CheckBox) Then
If cControl.Checked = True Then
value += cControl.Text
End If
End If
Next cControl