Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Применение оператора break для выхода из цикла C# Полное руководство Герберт Шилдт

Применение оператора break для выхода из цикла C# Полное руководство Герберт Шилдт

С помощью оператора 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++;
      } whiled <= 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
   Подсчет во внутреннем цикле: 0123456789
Подсчет во внешнем цикле: 1
   Подсчет во внутреннем цикле: 0123456789
Подсчет во внешнем цикле: 2
   Подсчет во внутреннем цикле: 0123456789
Циклы завершены

Как видите, оператор break из внутреннего цикла вызывает прерывание только этого цикла. А на выполнение внешнего цикла он не оказывает никакого влияния.
В отношении оператора break необходимо также иметь в виду следующее. Во-первых, в теле цикле может присутствовать несколько операторов break, но применять их следует очень аккуратно, поскольку чрезмерное количество операторов break обычно приводит к нарушению нормальной структуры кода. И во-вторых, оператор break, выполняющий выход из оператора switch, оказывает воздействие только на этот оператор, но не на объемлющие его циклы.