С помощью оператора break можно специально организовать немедленный вы ход из цикла в обход любого кода, оставшегося в теле цикла, а также минуя проверку условия цикла. Когда в теле цикла встречается оператор break, цикл завершается, а выполнение программы возобновляется с оператора, следующего после этого цикла.
Рассмотрим простой пример программы. // Применить оператор break для выхода из цикла. using System; class BreakDemo { static void Main { // Использовать оператор break для выхода из этого цикла. for(int i=-10; i <= 10; i++) { if(i > 0) break; // завершить цикл, как только значение // переменной i станет положительным Console.Write(i + " "); } Console.WriteLine("Готово!"); } }
Выполнение этой программы дает следующий результат. -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 Готово!
Как видите, цикл for организован для выполнения в пределах от -10 до 10, но, не смотря на это, оператор break прерывает его раньше, когда значение переменной i становится положительным.
Оператор break можно применять в любом цикле, предусмотренном в С#. В каче стве примера ниже приведена версия предыдущей программы, переделанная с целью использовать цикл do-while. // Применить оператор break для выхода из цикла do-while. using System; class BreakDemo2 { static void Main { int i; i = -10; do { if(i > 0) break; Console.Write(i + " "); i++; } while(i <= 10); Console.WriteLine("Готово!"); } }
А теперь рассмотрим более практический пример применения оператора break. В приведенной ниже программе выявляется наименьший множитель числа. // Выявить наименьший множитель числа. using System; class FindSmallestFactor { static void Main { int factor = 1; int num = -1000; for (int i=2; i <= num/i;' i++) { if((num%i) == 0) { factor = i; break; // прервать цикл, как только будет // выявлен наименьший множитель числа } } Console.WriteLine("Наименьший множитель равен " + factor); } }
Результат выполнения этой программы выглядит следующим образом. Наименьший множитель равен 2
Оператор break прерывает выполнение цикла for, как только будет выявлен наи меньший множитель числа. Благодаря такому применению оператора break исклю чается опробование любых других значений после выявления наименьшего множите ля числа, а следовательно, и неэффективное выполнение кода.
Если оператор break применяется в целом ряде вложенных циклов, то он преры вает выполнение только самого внутреннего цикла. В качестве примера рассмотрим следующую программу. // Применить оператор break во вложенных циклах. using System; class BreakNested { static void Main { for(int i=0; i<3; i++) { Console.WriteLine("Подсчет во внешнем цикле: " + i); Console.Write(" Подсчет во внутреннем цикле: "); int t = 0; while(t < 100) { if(t == 10) break; // прервать цикл, если t равно 10 Console.Write(t + " "); t++; } Console.WriteLine; } Console.WriteLine("Циклы завершены."); } }
Выполнение этой программы дает следующий результат. Подсчет во внешнем цикле: 0 Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 7 8 9 Подсчет во внешнем цикле: 1 Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 1 8 9 Подсчет во внешнем цикле: 2 Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 1 8 9 Циклы завершены
Как видите, оператор break из внутреннего цикла вызывает прерывание только этого цикла, а на выполнение внешнего цикла он не оказывает никакого влияния.
В отношении оператора break необходимо также иметь в виду следующее. Во- первых, в теле цикле может присутствовать несколько операторов break, но приме нять их следует очень аккуратно, поскольку чрезмерное количество операторов break обычно приводит к нарушению нормальной структуры кода. И во-вторых, оператор break, выполняющий выход из оператора switch, оказывает воздействие только на этот оператор, но не на объемлющие его циклы. Применение оператора continue