2017-03-06 159 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 

結果: