Инструкции и циклы C# if — учебник по условной логике
В этом руководстве описано, как написать код C#, который проверяет переменные и изменяет путь выполнения на основе этих переменных. Вы напишете код C# и сможете просмотреть результаты его компиляции и выполнения. Это руководство содержит ряд уроков, в которых рассматриваются конструкции ветвления и циклов в C#. В рамках этих занятий вы ознакомитесь с основами языка C#.
Чтобы вставить фрагмент кода в режим фокусировки , используйте сочетание клавиш ( CTRL + v или cmd + v ).
Предварительные требования
Для работы с руководством вам потребуется компьютер, настроенный для разработки в локальной среде. Инструкции по установке и общие сведения о разработке приложений в .NET см. в статье Настройка локальной среды .
Если вы предпочитаете выполнять код без настройки локальной среды, ознакомьтесь с интерактивной версией этого руководства в браузере.
Принятие решений с помощью оператора if
Создайте каталог с именем branches-tutorial. Сделайте его текущим, выполнив следующую команду:
dotnet new console -n BranchesAndLoops -o .
В шаблонах C# для .NET 6 используются операторы верхнего уровня. Приложение может не соответствовать коду, приведенному в этой статье, если вы уже выполнили обновление до .NET 6. Дополнительные сведения см. в статье Новые шаблоны C# для создания инструкций верхнего уровня.
Пакет SDK для .NET 6 также добавляет набор неявных global using директив для проектов, использующих следующие пакеты SDK:
Эти неявные директивы global using включают наиболее распространенные пространства имен для соответствующего типа проектов.
Эта команда создает консольное приложение .NET в текущем каталоге. Откройте файл Program.cs в любом редакторе и замените содержимое следующим кодом:
int a = 5; int b = 6; if (a + b > 10) Console.WriteLine("The answer is greater than 10.");
Чтобы выполнить этот код, введите dotnet run в окне консоли. На консоли должно появиться сообщение «Ответ больше 10». Измените объявление b , чтобы сумма была меньше 10:
Введите dotnet run еще раз. Так как ответ меньше 10, никакие данные не выводятся. Проверяемое условие имеет значение false. У вас еще нет кода для выполнения, так как вы написали только одну из возможных ветвей для оператора if — ветвь true.
Вероятнее всего, при изучении C# (как и любого другого языка программирования) вы будете допускать ошибки в коде. Компилятор найдет ошибки и сообщит о них. Внимательно просмотрите выходные данные ошибки и код, вызвавший ошибку. Как правило, сведения о причине ошибки можно найти в сообщении об ошибке компилятора.
В первом примере показаны возможности if и логические типы. Логическое значение — это переменная, которая может иметь одно из двух значений: true или false . Логические переменные в C# определяются особым типом — bool . Оператор if проверяет значение bool . Если значение true , выполняется оператор, следующий после if . В противном случае он пропускается. Этот процесс проверки условий и выполнения операторов на основе этих условий предоставляет широкие возможности.
Объединение операторов if и else
Чтобы выполнить разный код в ветвях true и false, создайте ветвь else , которая будет выполняться, если условие имеет значение false. Попробуйте создать ветвь else . Добавьте две последние строки из приведенного ниже кода (первые четыре должны быть уже добавлены):
int a = 5; int b = 3; if (a + b > 10) Console.WriteLine("The answer is greater than 10"); else Console.WriteLine("The answer is not greater than 10");
Оператор после ключевого слова else выполняется, только если проверяемое условие имеет значение false . Объединив операторы if и else с логическими условиями, вы получите все необходимые возможности для обработки условий true и false .
Отступы под операторами if и else предназначены только для удобства чтения. В языке C# необязательно ставить отступы или пробелы. Операторы после ключевого слова if или else будут выполняться на основе условия. Во всех строках в примерах кода, представленных в этом руководстве, отступы традиционно соответствуют потоку управления операторов.
Так как отступ не обязателен, используйте скобки < и >, если нужно указать несколько операторов в блоке кода, который выполняется в зависимости от условий. Программисты C# обычно используют эти фигурные скобки во всех предложениях if и else . Следующий пример аналогичен тому, который вы создали. Измените код выше, чтобы он соответствовал следующему коду:
int a = 5; int b = 3; if (a + b > 10) < Console.WriteLine("The answer is greater than 10"); >else
Все примеры кода в следующих разделах руководства содержат фигурные скобки в соответствии с принятой практикой.
Можно проверить более сложные условия. Добавьте следующий код после написанного кода:
int c = 4; if ((a + b + c > 10) && (a == b)) < Console.WriteLine("The answer is greater than 10"); Console.WriteLine("And the first number is equal to the second"); >else
Символ == позволяет проверить равенство. С помощью == обозначается отличие проверки равенства от назначения, которое показано в a = 5 .
&& представляет оператор and. То есть для выполнения оператора в ветви true оба условия должны иметь значение true. В этих примерах также показано, что в каждой условной ветви можно задать несколько операторов. Нужно лишь заключить их в скобки < и >. Вы также можете использовать для || представления «или». Добавьте следующий фрагмент после написанного кода:
if ((a + b + c > 10) || (a == b)) < Console.WriteLine("The answer is greater than 10"); Console.WriteLine("Or the first number is equal to the second"); >else
Измените значения a , b и c , а также переключитесь между && и || для изучения. Так вы лучше поймете, как работают операторы && и || .
Вы завершили первый этап. Прежде чем перейти к следующему разделу, переместим текущий код в отдельный метод. Это упростит начало работы с новым примером. Поместите существующий код в метод ExploreIf() . Вызовите этот метод в начале программы. После внесения этих изменений код должен выглядеть так:
ExploreIf(); void ExploreIf() < int a = 5; int b = 3; if (a + b >10) < Console.WriteLine("The answer is greater than 10"); >else < Console.WriteLine("The answer is not greater than 10"); >int c = 4; if ((a + b + c > 10) && (a > b)) < Console.WriteLine("The answer is greater than 10"); Console.WriteLine("And the first number is greater than the second"); >else < Console.WriteLine("The answer is not greater than 10"); Console.WriteLine("Or the first number is not greater than the second"); >if ((a + b + c > 10) || (a > b)) < Console.WriteLine("The answer is greater than 10"); Console.WriteLine("Or the first number is greater than the second"); >else < Console.WriteLine("The answer is not greater than 10"); Console.WriteLine("And the first number is not greater than the second"); >>
Закомментируйте вызов ExploreIf() . Это поможет упорядочить выходные данные в этом разделе.
// запускает комментарий в C#. Комментарии — это любой текст, который должен быть сохранен в исходном коде, но не должен выполняться как код. Компилятор не создает исполняемый код из комментариев.
Использование циклов для повторения операций
В этом разделе циклы используются для повторения операторов. Добавьте следующий код после вызова ExploreIf :
int counter = 0; while (counter < 10) < Console.WriteLine($"Hello World! The counter is "); counter++; >
Оператор while проверяет условие и выполняет инструкцию или блок инструкций, следующий после while . Он многократно проверяет условие, выполняя эти инструкции до тех пор, пока условие не будет false.
В этом примере представлен еще один новый оператор. Объект ++ после переменной counter представляет собой оператор инкремента. Он добавляет 1 к значению counter и сохраняет это значение в переменной counter .
Напишите такой код, при выполнении которого значение условия цикла while изменится на false. В противном случае будет создан бесконечный цикл, в котором выполнение программы никогда не закончится. Это не показано в примере, так как нужно принудительно закрыть программу, нажав клавиши CTRL+C, или другим способом.
В цикле while условие проверяется, прежде чем выполнить код, который следует после while . А в цикле do . while сначала выполняется код, а потом проверяется условие. Цикл do while показан в следующем примере кода.
int counter = 0; do < Console.WriteLine($"Hello World! The counter is "); counter++; > while (counter < 10);
Этот цикл do и цикл while , приведенный выше, выводят одинаковый результат.
Работа с циклом for
Цикл for широко используется в C#. Выполните этот код:
Этот цикл работает так же, как циклы while и do , которые вы использовали ранее. Оператор for состоит из трех частей, которые отвечают за его работу.
Первая часть — для инициализатора: int index = 0; объявляет index переменной цикла и задает для ее начальное значение 0 .
Последняя часть — для итератора: index++ определяет, как изменится переменная цикла после выполнения блока, следующего после оператора for . В нашем случае определяется, что значение index должно увеличиваться на 1 каждый раз, когда выполняется блок.
Поэкспериментируйте. Попробуйте использовать следующие варианты.
- Измените инициализатор, чтобы цикл начинался с другого значения.
- Измените условие, чтобы цикл заканчивался другим значением.
По окончании попробуйте самостоятельно написать код, чтобы применить полученные знания.
Есть еще одна циклическая инструкция, которая не рассматривается в этом руководстве: оператор foreach . Оператор foreach повторяет выполнения для каждого элемента в последовательности элементов. Чаще всего он используется с коллекциями, поэтому он рассматривается в следующем руководстве.
Создание вложенных циклов
Цикл while , do или for можно вложить в другой цикл, чтобы создать матрицу, комбинируя каждый элемент во внешнем цикле с каждым элементом во внутреннем цикле. Давайте сделаем это для получения набора из буквенно-цифровых пар, представляющих строки и столбцы.
Один цикл for может создавать строки:
Другой цикл может создавать столбцы:
for (char column = 'a'; column < 'k'; column++) < Console.WriteLine($"The column is "); >
Можно вложить один цикл внутрь другого для формирования пар:
Как видите, внешний цикл увеличивается на единицу при каждом полном выполнении внутреннего цикла. Измените порядок вложенности строк и столбцов и просмотрите изменения самостоятельно. По завершении поместите код, приведенный в этом разделе, в метод ExploreLoops() .
Объединение ветвей и циклов
Теперь, когда вы ознакомились с оператором if и конструкциями цикла на языке C#, попытайтесь написать код C# для поиска суммы всех целых чисел от 1 до 20, которые делятся на 3. Вот несколько подсказок:
- оператор % позволяет получить остаток от операции деления;
- оператор if предоставляет условие, которое позволяет определить, будет ли число учитываться в сумме;
- цикл for позволяет повторить последовательность шагов для всех чисел от 1 до 20.
Попробуйте самостоятельно. Затем проверьте результат. Вы должны получить ответ "63". Один из возможных ответов можно увидеть в полном примере кода в GitHub.
Вы ознакомились с руководством по ветвям и циклам.
Теперь вы можете перейти к ознакомлению с руководством Массивы и коллекции в своей среде разработки.
Дополнительные сведения об этих понятиях см. в следующих статьях: