2013-03-28 2 views
1

У меня есть 5 значений, и я сравниваю их и пытаюсь сделать какое-то действие в зависимости от того, какое значение является наибольшим.Как я могу улучшить эти сравнения?

Значения v1, v2, v3, v4 и v5

If (v1 > v2 And v1 > v3 And v1 > v4 And v1 > v5) Then 
     l1st.Text = "Al-Haj Shaji Gul" 
     Label5.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.shajismal 

ElseIf (v2 > v3 And v2 > v4 And v2 > v1 And v2 > v5) Then 
     l1st.Text = "Nor huq" 
     Label6.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.norlhuq 

ElseIf (v3 > v1 And v3 > v2 And v2 > v4 And v3 > v5) Then 
     l1st.Text = "Darya Khan" 
     Label7.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.daryakhanpic 

ElseIf (v4 > v1 And v4 > v2 And v4 > v3 And v4 > v5) Then 
     l1st.Text = "Imran Khan" 
     Label8.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.Imran_Khan 

ElseIf (v5 > v1 And v5 > v2 And v5 > v3 And v5 > v4) Then 
     l1st.Text = "Zarnoor Afridi" 
     Label10.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.zarnorsmal 
End If 
+0

В каком направлении вы пытаетесь сделать код лучше? – jonhopkins

+0

сложно и когда значения становятся равными, доза не работает – sangeen

+0

Это действительно проблема. Существуют ли конкретные действия, которые вы хотите предпринять, если две или более переменных имеют наибольшую ценность? Если нет, самое лучшее, что вы могли бы сделать, это изменить все '>' на '> =' – jonhopkins

ответ

3

Просто пример:

Dim v_array(4) As Integer 
Dim max_v As Integer 
For i = 0 To 4 
    v_array(i) = i + (Math.Rnd(15) * 10) 
Next i 

For Each v In v_array 
    If v > max_v Then 
     max_v = v 
    End If 
Next v 

Select Case max_v 
    Case v_array(0) 
     MsgBox "Something" 
    Case v_array(1) 
     MsgBox "Something 1" 
    Case v_array(2) 
     MsgBox "Something 2" 
    Case v_array(3) 
     MsgBox "Something 3" 
    Case v_array(4) 
     MsgBox "Something 4" 
End Select 
2

Смотрите, если это помогает вообще. Он получает наивысший балл и хранит его в max. Затем он проверяет все пять значений и для каждого из них то же самое, что и max, т. Е. Является самым высоким, он устанавливает элементы управления для значений для этого ученика. Если есть более одного с наивысшим балл, он добавляет этих учеников в конец текста текстового поля, например «Student1 = Student3». Единственное, что я не мог обойти, это то, что образ будет последним учеником с самым высоким счетом.

Dim max As Integer = {v1, v2, v3, v4, v5}.Max 
Dim multiple As Boolean = False 

l1st.Text = "" 
If (v1 = max) Then 
     l1st.Text = "Al-Haj Shaji Gul" 
     Label5.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.shajismal 
     multiple = True 
EndIf 
If (v2 = max) Then 
     If multiple = True Then 
      l1st.Text = l1st.Text + " = " 
     EndIf 
     multiple = True 
     l1st.Text = l1st.Text + "Nor huq" 
     Label6.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.norlhuq 
EndIf 
If (v3 = max) Then 
     If multiple = True Then 
      l1st.Text = l1st.Text + " = " 
     EndIf 
     multiple = True 
     l1st.Text = l1st.Text + "Darya Khan" 
     Label7.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.daryakhanpic 
EndIf 
If (v4 = max) Then 
     If multiple = True Then 
      l1st.Text = l1st.Text + " = " 
     EndIf 
     multiple = True 
     l1st.Text = l1st.Text + "Imran Khan" 
     Label8.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.Imran_Khan 
EndIf 
If (v5 = max) Then 
     If multiple = True Then 
      l1st.Text = l1st.Text + " = " 
     EndIf 
     multiple = True 
     l1st.Text = l1st.Text + "Zarnoor Afridi" 
     Label10.ForeColor = Color.Red 
     Me.PictureBox12.Image = Global.shaji.My.Resources.Resources.zarnorsmal 
End If 
+0

да, джонхопкинс это работает, но jonhopkins есть одна большая проблема, возникшая вами, вы действительно впечатляете меня, и я хочу быть вашим другом, но как я найду вас в facebook ???? – sangeen

+0

@ThinkingStiff, спасибо за это улучшение. Не думал об этом. sangeen, изменение в первой строке может быть полезно принять к сведению на будущее. – jonhopkins

1

Сначала поместите переменные в массив; это делает поиск максимально проще

Dim v = New() {v1, v2, v3, v4, v5} 
Dim i As Integer = Array.IndexOf(v, v.Max()) + 1 
Select Case i 
    Case 1 
     ' Process when v1 is maximum 
    Case 2 
     ' Process when v2 is maximum 
    Case 3 
     ' Process when v3 is maximum 
    Case 4 
     ' Process when v4 is maximum 
    Case 5 
     ' Process when v5 is maximum 
End Select 

причины вы также можете определить только одну переменную v как массив, чтобы начать с, вместо того, чтобы использовать отдельные переменные.

Dim v = New Integer(4) {} 
v(0) = 10 
v(1) = 15 
... 
Смежные вопросы