Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csPmLpFl 147 of 436 menu
◀ ▶

Флаги в циклах в C#

Сейчас мы научимся работать с флагами. Флаг - это специальная переменная, которая может принимать только два значения: true и false. С помощью флагов можно решать задачи, проверяющие отсутствие чего-либо: к примеру, можно проверить, что в строке нет определенной буквы.

Давайте решим следующую задачу: дана строка "abcde", нужно проверить, есть ли в ней буква "'c'". Если есть - выведем "Y", если нет - выведем "N".

Для начала давайте попробуем вывести "Y". Для этого переберем все символы строки и ифом будем спрашивать, равен ли текущий символ букве "'c'". Если равен - выведем "Y":

string str = "abcde"; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { Console.WriteLine("Y");// prints Y } }

Но наше решение не очень хорошо: ведь если в строке будет не одна буква "'c'", а несколько, то "Y" выведется несколько раз. Давайте запишем эту букву дважды и убедимся в этом:

string str = "abccde"; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { Console.WriteLine("Y"); // prints multiple times } }

Поправим проблему: завершим цикл с помощью break, если буква уже найдена:

string str = "abccde"; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { Console.WriteLine("Y");// prints Y break; // break loop } }

Давайте теперь попробуем сделать так, чтобы, если в строке вообще нет буквы "'c'", выводилось "N". Распространенным заблуждением будет добавить else к нашему ифу - в этом случае "N" будет выводиться на все символы, не являющиеся буквой "'c'":

string str = "abcde"; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { Console.WriteLine("Y"); // prints on letter c } else { Console.WriteLine("N"); // prints on letters a, b, d and e } }

Итак, идея добавить else - плохая идея, не рабочая. Для решения задач подобного типа (такие задачи встречаются достаточно часто) и используют так называемые флаги.

Как уже упоминалось выше, флаг - это такая переменная, которая может принимать два значения: true или false.

Итак, давайте сделаем переменную flag с таким значением: если она равна true, то в строке есть буква "'c'", а если false, то такой буквы нет.

Изначально поставим переменную flag в значение false - то есть будем считать, что буквы "'c'" в строке нет:

string str = "abcde"; bool flag = false; // assume no letter c

Затем запустим цикл с ифом так, как мы делали это раньше. Если цикл обнаружит, что в строке есть буква "'c'" - то поставим переменную flag в значение true и выйдем из цикла с помощью break:

string str = "abcde"; bool flag = false; // assume no letter c for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { flag = true; // letter found break; // break loop } }

Ответ на вопрос, есть ли в строке буква "'c'" или нет, мы можем дать только после цикла. И этот ответ у нас уже есть: после цикла переменная flag могла остаться false или могла сменить свое значение на true, если цикл обнаружил в строке букву "'c'":

string str = "abcde"; bool flag = false; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { flag = true; break; } } // flag is true or false

Теперь после цикла мы можем сделать иф, который посмотрит на переменную flag и выведет на экран "Y" или "N":

string str = "abcde"; bool flag = false; for (int i = 0; i < str.Length; i++) { char ch = str[i]; if (ch == 'c') { flag = true; break; } } if (flag == true) { Console.WriteLine("Y");// prints Y } else { Console.WriteLine("N"); }

Дана строка:

string str = "program";

Проверьте, есть ли в ней буква "'r'". Если есть - выведите "Y", а если нет - выведите "N".

Дана строка:

string str = "hello";

Проверьте, есть ли в ней буква "'x'". Если есть - выведите "Y", а если нет - выведите "N".

Напишите код, который будет проверять число на то, простое оно или нет. Простое число делится только на единицу и на само себя, и не делится на другие числа.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить