2017-03-06 173 views
0

内我有5个号码和想要测试如果他们中的3相同,所以我写了这个:使用多个条件单case语句

Select Case Reel1Num 
Case (Reel2Num And Reel3Num) Or (Reel2Num And Reel4Num) Or (Reel2Num And Reel5Num) Or (Reel3Num And Reel4Num) Or (Reel3Num And Reel5Num) Or (Reel4Num And Reel5NUm) 
    ThreeNums = +1 
    lbl3OfSame.Text = "Three Of Same: " & ThreeNums 
End Select 

但它似乎并没有回到我想要的结果。我知道我可以使用类似:

If (Reel1NUm = Reel2Num And Reel1Num = Reel3Num) Or... Then 
    ThreeNums = +1 
    lbl3OfSame.Text = "Three Of Same: " & ThreeNums 
End If 

,但似乎像这样更多的写作比我觉得我需要的,我想比较的金额做。

有没有更简单的方法来做到这一点?

+0

您在布尔一路上涨 “比较”顶部,即reel2 =真reel3 = true时,你可以使用类似((R2-R3)*(R2-R4)*(R2-R5))= 0也许 –

+0

^^没有工作。无论如何,谢谢 –

+0

他们肯定是数字?如果R 2,R3,R4分别为3和R 5是2,则R2-R3 = 0,R 2 -R 4 = 0和R2-R5 = 1,且0 * 0 * 1 = 0?谢谢, –

回答

0

正如其他评论者所指出的,数字的“布尔”比较可能不是做什么,你觉得它在做什么。您需要将每个案例的卷轴值与所有其他卷轴值进行比较,这些值不会比您的If结构短得多。有各种数学解决方案(如果你的数据是好的,那么由Nathan_Sav提出的解决方案应该可以工作)。

但是,你问是否有更好的方法,并保持代码的简单,一个办法是卷轴值分配给某些类型的结果数组或集合。

一个明显的收集将是一项Dictionary其中可能包含每一个独特的卷轴值的频率计数和数量。如果你宣布你ReelNum作为数组那么代码会很短,但保持你的个人的变量,你需要你的主要Sub和另外一个构建词典。所以,你的主子是:

Dim count As Dictionary(Of Integer, Integer) 
    count = New Dictionary(Of Integer, Integer)() 

    BuildResults(count, ReelNum1) 
    BuildResults(count, ReelNum2) 
    BuildResults(count, ReelNum3) 
    BuildResults(count, ReelNum4) 
    BuildResults(count, ReelNum5) 

    Select Case count.Values.Max() 
     Case 1 : Console.Write("None the same") 
     Case 2 : Console.Write("Two the same") 
     Case 3 : Console.Write("Three the same") 
     Case 4 : Console.Write("Four the same") 
     Case 5 : Console.Write("All the same") 
     Case Else : Console.Write("Who knows?") 
    End Select 

和建筑常规:

Private Sub BuildResults(ByRef count As Dictionary(Of Integer, Integer), ByVal newNum As Integer) 
    If Not count.ContainsKey(newNum) Then count.Add(newNum, 0) 
    count(newNum) = count(newNum) + 1 
End Sub 

我不知道这是否是一个教育项目,但以防万一它,我已经包含了Select Case所以你可以看到它是如何工作的。

+0

谢谢,这正是我想要的。现在阅读一本字典是干什么的!谢谢! –

+0

很高兴帮助。看看所有的答案,如果你的问题已经解决,那么请通过'接受'其中一个答案来将你的帖子从未回答的列表中删除。 – Ambie

0

您可以通过数字并找出组哪些出现三次:

Sub Main 
    Dim numbers = New List(Of Integer) From {1,2,3,2,4,5,3,6,2,4,7} 
    Dim numbersAppearingThreeTimes = numbers.GroupBy(Function(i) i) _ 
              .Where(Function(g) g.Count() = 3) 

    For Each g In numbersAppearingThreeTimes 
     Console.WriteLine(g.Key) 
    Next 
End Sub 

结果: