Инструкции и циклы 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:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Эти неявные директивы 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:
int b = 3;
Введите 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
{
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 equal to the second");
}
else
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("Or the first number is not equal to the second");
}
Символ ==
позволяет проверить равенство. С помощью ==
обозначается отличие проверки равенства от назначения, которое показано в 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
{
Console.WriteLine("The answer is not greater than 10");
Console.WriteLine("And the first number is not equal to the second");
}
Измените значения 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()
. Это поможет упорядочить выходные данные в этом разделе.
//ExploreIf();
//
запускает комментарий в C#. Комментарии — это любой текст, который должен быть сохранен в исходном коде, но не должен выполняться как код. Компилятор не создает исполняемый код из комментариев.
Использование циклов для повторения операций
В этом разделе циклы используются для повторения операторов. Добавьте следующий код после вызова ExploreIf
:
int counter = 0;
while (counter < 10)
{
Console.WriteLine($"Hello World! The counter is {counter}");
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}");
counter++;
} while (counter < 10);
Этот цикл do
и цикл while
, приведенный выше, выводят одинаковый результат.
Работа с циклом for
Цикл for широко используется в C#. Выполните этот код:
for (int index = 0; index < 10; index++)
{
Console.WriteLine($"Hello World! The index is {index}");
}
Этот цикл работает так же, как циклы while
и do
, которые вы использовали ранее. Оператор for
состоит из трех частей, которые отвечают за его работу.
Первая часть — для инициализатора: int index = 0;
объявляет index
переменной цикла и задает для ее начальное значение 0
.
Средняя часть — для условия: index < 10
объявляет, что этот цикл for
продолжает выполняться, пока значение счетчика меньше 10.
Последняя часть — для итератора: index++
определяет, как изменится переменная цикла после выполнения блока, следующего после оператора for
. В нашем случае определяется, что значение index
должно увеличиваться на 1 каждый раз, когда выполняется блок.
Поэкспериментируйте. Попробуйте использовать следующие варианты.
- Измените инициализатор, чтобы цикл начинался с другого значения.
- Измените условие, чтобы цикл заканчивался другим значением.
По окончании попробуйте самостоятельно написать код, чтобы применить полученные знания.
Есть еще одна циклическая инструкция, которая не рассматривается в этом руководстве: оператор foreach
. Оператор foreach
повторяет выполнения для каждого элемента в последовательности элементов. Чаще всего он используется с коллекциями, поэтому он рассматривается в следующем руководстве.
Создание вложенных циклов
Цикл while
, do
или for
можно вложить в другой цикл, чтобы создать матрицу, комбинируя каждый элемент во внешнем цикле с каждым элементом во внутреннем цикле. Давайте сделаем это для получения набора из буквенно-цифровых пар, представляющих строки и столбцы.
Один цикл for
может создавать строки:
for (int row = 1; row < 11; row++)
{
Console.WriteLine($"The row is {row}");
}
Другой цикл может создавать столбцы:
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The column is {column}");
}
Можно вложить один цикл внутрь другого для формирования пар:
for (int row = 1; row < 11; row++)
{
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The cell is ({row}, {column})");
}
}
Как видите, внешний цикл увеличивается на единицу при каждом полном выполнении внутреннего цикла. Измените порядок вложенности строк и столбцов и просмотрите изменения самостоятельно. По завершении поместите код, приведенный в этом разделе, в метод ExploreLoops()
.
Объединение ветвей и циклов
Теперь, когда вы ознакомились с оператором if
и конструкциями цикла на языке C#, попытайтесь написать код C# для поиска суммы всех целых чисел от 1 до 20, которые делятся на 3. Вот несколько подсказок:
- оператор
%
позволяет получить остаток от операции деления; - оператор
if
предоставляет условие, которое позволяет определить, будет ли число учитываться в сумме; - цикл
for
позволяет повторить последовательность шагов для всех чисел от 1 до 20.
Попробуйте самостоятельно. Затем проверьте результат. Вы должны получить ответ "63". Один из возможных ответов можно увидеть в полном примере кода в GitHub.
Вы ознакомились с руководством по ветвям и циклам.
Теперь вы можете перейти к ознакомлению с руководством Массивы и коллекции в своей среде разработки.
Дополнительные сведения об этих понятиях см. в следующих статьях: