Конструкция Select Case
Конструкция Select case позволяет обрабатывать в программе несколько условий и аналогична блоку конструкций if.. .Then.. .Else. Эта конструкция состоит из анализируемого выражения и набора операторов case на каждое возможное значение выражения. Работает эта конструкция следующим образом. Сначала Visual Basic вычисляет значение заданного в конструкции выражения. Затем полученное значение сравнивается со значениями, задаваемыми в операторах case конструкции. Если найдено искомое значение, выполняются команды, приписанные данному оператору case. После завершения выполнения конструкций управление будет передано конструкции, следующей за ключевым словом End Select.
Синтаксис конструкции Select Case следующий:
Select Case <СравниваемоеЗначение>
Case Значение1
<Конструкция1>
Case Значение2
<Конструкция2>
. . .
Case Else
<КонструкцияN>
End Select
В начале конструкции расположены ключевые слова Select Case, указывающие, что расположенный рядом с ними параметр сравниваемоеЗначение будет проверяться на несколько значений.
В качестве примера воспользуемся конструкцией Select Case для решения предыдущей задачи:
Select Case x
Case 1 То 9
MsgBox «Значение больше 0»
Case 0
MsgBox «Значение равно 0»
Case -9 То -1
MsgBox «Значение меньше 0»
End Select
Операторы цикла
В программах Visual Basic 6.0 для выполнения повторяющихся действий используются циклы. Они бывают следующих типов:
For…Next
For Each…Next
Do. . . Loop
Рассмотрим перечисленные конструкции.
Цикл с использованием конструкции For..Next
Конструкция For…Next выполняет последовательность команд определенное число раз. Такую конструкцию называют циклом, а выполняемые ею программные коды — телом цикла.
Синтаксис конструкции For.. .Next следующий:
For Счетчик = НачальноеЗначение То КонечноеЗначение [Step Шаг]
Конструкции
[Exit Do]
Next [Счетчик]
Например:
For lngCounter = 1 To 10 Step 2
txtCounter.Text = txtCounter.Text & lngCounter
Next lngCounter
Ключевое слово Exit For применяется для преждевременного завершения цикла, т.е. когда счетчик не доходит до конечного значения.
Цикл с использованием конструкции Do…Loop
Цикл, задаваемый конструкцией Do… Loop, выполняется до тех пор, пока истинно задаваемое в цикле условие.
Синтаксис конструкции Do. .Loop следующий:
С предусловием:
Do [{While | Until} Условие]
Конструкции
[Exit Do]
Loop
С постусловием:
Do
Конструкции
[Exit Do]
Loop [{While | Until} Условие]
Пример использования конструкции приведен ниже:
nCounter = 2
Do While nCounter < 10
nDecades(nCounter) = nCounter * 2
nCounter = nCounter * 2
Loop
Ключевое слово Exit Do применяется для преждевременного завершения цикла.
Цикл с использованием конструкции For Each… Next
Цикл с использованием конструкции For Each…Next похож на цикл For.. .Next, но используется для обработки всех элементов некоторого набора объектов или массива. Его особенно удобно использовать в том случае, когда количество обрабатываемых элементов не известно.
Синтаксис конструкции For Each.. .Next следующий:
For Each Элемент In Группа
Конструкции
Next Элемент
Пример использования конструкции приведен ниже:
Dim objControl As Control
For Each objControl In Controls
objControl.Caption = «Test » & objControl.Caption
Next objControl
vb.net — выберите регистр для проверки диапазона десятичного числа
спросил
Изменено 4 года, 4 месяца назад
Просмотрено 54к раз
Мне нужно проверить, является ли demical от 0 до 49,99 или от 50 до 99,99 или от 100 до 199,99 или больше 200. Я пытаюсь сделать это с помощью выбора регистра, но я не уверен в синтаксисе. пожалуйста помоги!
- vb.net
2
Выберите корпус aa Случай 1 – 1.49 Сообщение(1) Случай 1.5–2 Сообщение(2) Дело еще MsgBox("было меньше 1 или больше 2 или между 1,49 и 1,5") Конец выбора
это (ниже) вошло бы в дело еще
Dim aa As Double = 1,499
это (ниже) войдет в случай 1 до 1,49
Dim aa As Double = 1,4
это (ниже) войдет в случай от 1,5 до 2
Dim aa As Double = 1,78
другой способ сделать это: Отсюда
Выберите значение регистра Дело <= 49,99 Debug.WriteLine("первая группа") Дело <= 99,99 Debug.WriteLine("вторая группа") Дело <= 199,99 Debug.WriteLine("третья группа") Дело еще Debug.WriteLine("четвертая группа") Конец выбора
а может быть и это:
Выберите Верный регистр Случай (значение >= 0, а также значение <= 49,99) Debug. WriteLine("первая группа") Случай (значение >= 50, а также значение <= 99,99) Debug.WriteLine("вторая группа") Регистр (значение >= 100, а также значение <= 199,99) Debug.WriteLine("третья группа") Дело еще Debug.WriteLine("четвертая группа") Конец выбора
6
У меня есть сомнения, что вы сформулировали этот вопрос, чтобы точно сказать, что вы имеете в виду. Вы действительно хотите, чтобы первая группа включала просто от 0 до 49,99? Или вы действительно имеете в виду от 0 до, но не включая 50, и вы просто ожидаете, что ваш ввод будет иметь 2 знака после запятой или меньше? Если вы хотите сгруппировать числа, скажем, по пятидесяткам, то очень странно писать:
Select Case value Дело <= 49,99 Debug.WriteLine("49,99 или меньше") Дело <= 99,99 Debug.WriteLine("больше 49,99, 99,99 или меньше") ' ...и так далее ' Конец выбора
Число 49,995 здесь попадает во вторую группу, что кажется нелогичным. Выбор двух знаков после запятой в качестве точки отсечки произволен.
Оператор '<=' здесь не подходит; используйте оператор '<'; это имеет гораздо больше смысла:
Выберите значение регистра Случай < 50 Debug.WriteLine("меньше пятидесяти") Случай < 100 Debug.WriteLine("пятьдесят или больше, меньше 100") ' ... и так далее ' Конец выбора
Значение затемнения As Double = 133,5 Выберите значение дела Дело <= 49,99 Debug.WriteLine("первая группа") Дело <= 99,99 Debug.WriteLine("вторая группа") Дело <= 199,99 Debug.WriteLine("третья группа") Дело еще Debug.WriteLine("четвертая группа") Конец выбора
Куда в вашем вопросе попадают такие значения, как 49,992? Поскольку вы сказали 0-49,99, а затем 50-99,99, что-нибудь между 49,99 и 50, куда это идет? В моем примере выше он будет включен в один из параметров, поэтому это значения от 0 до 49,99, значения от 49,99 до 99,99 и т. д. и т. д.
7
AlbertEin что-то знает, но для целочисленного деления в VB.Net нужно написать так:
Dim range as Integer диапазон = некоторое целое \ 50
Обратите внимание на символ обратного деления. Оттуда вы можете Select Case range
.
Но на самом деле ответ jvanderh больше всего выражает то, что вы хотите сделать, потому что он позволяет легко добавлять случаи в будущем, которые не разбиваются на кратные 50 и не требуют от будущих сопровождающих следовать математике или знать о Оператор.
Затемнение диапазона как целое число диапазон = некоторое целое / 50 Итак, если диапазон = 0, это 0–49,99, если 1, то 50–99,99 и т. д.
1
Почему бы вам не попробовать если/то/иначе? Они эквивалентны, и я не уверен, что оператор case в VBasic может обрабатывать нецелые значения.
4
Я бы сделал это так: я использую #, чтобы явно указать, что значения имеют тип "double".
Затемнение входного сигнала как двойное = 2,99 Выберите ввод регистра Случай 0.0# До 49.99# Response.Write("От 0 до 49,99") Случай 50.0# - 99.99# Response.Write("От 50 до 99,99") Дело еще Response.Write("Значение не попало в диапазон.") Конец выбора1
Сотрудник структуры Тусклый процент как десятичный Dim имя дня As DayOfWeek Конечная структура Dim emp Как сотрудник эмп.процент = CDec(45,5) emp.dayname = ДеньНедели.Пятница Выберите «Регистр верно» Случай (emp.percent >= 0 и emp.percent <= 490,99 И emp.dayname = Now.DayOfWeek) MsgBox("Процент сотрудников" & emp.percent & "Название дня" & Now.DayOfWeek.ToString) Конец выбора
1
Я наткнулся на этот вопрос, но эти ответы по-прежнему допускают слишком много пробелов.
'В этом примере значение 49,991 - 49,999* попадет в категорию 99,99, где, как я ожидаю, оно предназначено для 49.99 категория Выберите значение дела Дело <= 49,99 Debug.WriteLine("первая группа") Дело <= 99,99 Debug.WriteLine("вторая группа") Дело <= 199,99 Debug.WriteLine("третья группа") Дело еще Debug.WriteLine("четвертая группа") Конец выбора
Вместо этого лучше изменить порядок, чтобы не указывать лишние десятичные разряды для закрытия пробелов.
Выбор значения варианта Дело >= 200 Debug.WriteLine("четвертая группа") Дело >= 100 Debug.WriteLine("третья группа") Дело >= 50 49 года.9999* всегда будет попадать в эту группу, независимо от количества знаков после запятой. Debug.WriteLine("вторая группа") Дело еще Debug.WriteLine("первая группа") Конец выбора
Оператор Select Case
следует только за первым истинным случаем, поэтому даже если последующие случаи также могут быть истинными, они будут пропущены, если будут обнаружены более ранним случаем.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Оператор select case — работа с переменными VB.
NETПо сути, оператор select похож на сокращение для значительного количества операторов IF...THEN...ELSEIF...END If. Все, что он на самом деле делает, — это облегчает чтение кода, если у вас есть значительное количество операторов или условий IF, которые необходимо протестировать на одном экземпляре. В основном операторы Select будут использоваться для определения результата какого-либо диалогового окна или другого предопределенного результата, который был выбран пользователем. если бы вы написали оператор select, это выглядело бы так:
Если sampleVariable.Equals("String1") Тогда input1 = "Некоторое значение" ElseIf sampleVariable.Equals("String2") Тогда input2 = "Некоторое значение" ElseIf sampleVariable.Equals("String3") Then MsgBox (ввод1 и ввод2) Конец, если
Причина, по которой вы не можете получить доступ к значениям, которые вы устанавливаете из первых двух операторов в третьем случае, заключается в том, что присвоение значения скрыто в закрытом блоке. Чтобы увидеть это более четко, взгляните на это:
Dim checkValue As Boolean Если проверитьЗначение Тогда Dim hiddenVariable As String = "Hello World" Конец, если MsgBox (скрытая переменная)
Используя приведенный выше пример, моя hiddenVarible
объявляется и создается в блоке If. Это будет работать нормально, пока checkValue
всегда будет истинным. Однако, если бы checkValue
было ложным, тогда hiddenVariable
никогда не объявлялся бы, и вы, вероятно, получили бы исключение об исключении NullReference. На самом деле Visual Studio даже не скомпилирует это с настройками по умолчанию.
То же самое происходит и с вашим кодом. в то время как вы объявили input1 и input2 в начале, вы не создавали их экземпляры с какими-либо значениями. Итак, если случай № 3 является результатом вашего оператора выбора, то вы, по сути, вызываете MsgBox(Ничего и ничего)
. Настройки значений из ваших первых двух операторов case никогда не выполняются, потому что оператор case не был оценен как истинный.
Глядя на код, я не понимаю, почему вы делаете это таким образом, поскольку вы присваиваете своим переменным строковые литералы. Предлагаю вам несколько альтернативных вариантов на выбор.
Добавление некоторых проверок к случаю № 3 для значений Nothing:
Dim input1 As String Dim input2 как строка Выберите Case sampleVariable Дело "Строка1" input1 = "Некоторое значение" Корпус "Строка2" input2 = "Некоторое значение" Кейс "Строка3" Если Ничего(вход1) ИлиЕстьНичего(вход2) Тогда MsgBox("По крайней мере одно из входных значений не имеет значения") Еще MsgBox (ввод1 и ввод2) Конец, если Конец выбора
Используйте классические блоки IF...THEN...END IF:
Dim input1 As String = String.Empty Dim input2 As String = String.Empty Если sampleVariable.Equals("String1") Тогда input1 = "Некоторое значение" ElseIf sampleVariable.Equals("String2") Тогда input2 = "Некоторое значение" ElseIf sampleVariable.