Я вижу несколько вещей, которые могут улучшить с вашей рутиной. Прежде всего, сравнение должно быть:
If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then
, как вы делали это раньше If a = 6 or 7 or 8 ...
не работает, потому что любое целое число без знака всегда будет вычисляться так. В результате ваш код всегда получал b = true
. Причина, по которой вы всегда становились ложными, заключалась в том, что по умолчанию Visual Basic инициализирует Booleans по умолчанию, и вы никогда ничего не назначаете check
, поэтому check = false
.
С другой стороны, я бы создал функцию вместо передачи значения по ссылке. Функция выполнит все необходимые вычисления и вернет значение. Полный код выглядит следующим образом:
Function salomonsize(ByVal a As Integer) As Boolean
If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then
Return True
Else
Return False
End If
End Function
Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click
Dim check = salomonsize(txtSalomonSize.Text)
If check = False Then
MsgBox("Wrong size")
Exit Sub
End If
End Sub
, как вы это делали, вы присваивающей b = true
и b = false
. Я полагаю, вы хотели назначить check
равным true или false вместо этого, поскольку это значение, которое вы позже проверяете.
Edit: еще лучший способ сделать это и избежать так много сравнений будет использовать массив:
Function salomonsize(ByVal a As Integer) As Boolean
Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12}
If ValidNumbers.Contains(a) Then
Return True
Else
Return False
End If
End Function
Как вы можете видеть, если вам нужно добавить больше номеров, вы просто добавить их в массив. Вы можете даже прочитать их из файла, если это необходимо. Затем используйте функцию .Contains
, чтобы сравнить ваше значение. Вы могли бы просто сделать Return ValidNumbers.Contains(a)
и полностью избегать If/Else:
Function salomonsize(ByVal a As Integer) As Boolean
Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12}
return ValidNumbers.Contains(a)
End Function
Wow! Большое вам спасибо за быстрый ввод! Очень полезно, поскольку я довольно долго общаюсь с этим. Если бы у меня была более высокая репутация, я бы голосовал, но приятно видеть таких полезных людей здесь, поскольку я новичок в стеке. Еще раз спасибо! – DodgerT
@DodgerT Рад, что это помогло. –