Книга: C# 4.0: полное руководство

Применение оператора break для выхода из цикла

Применение оператора break для выхода из цикла

С помощью оператора 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 б 7 8 9
Подсчет во внешнем цикле: 2
    Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 7 8 9
Циклы завершены

Как видите, оператор break из внутреннего цикла вызывает прерывание только этого цикла, а на выполнение внешнего цикла он не оказывает никакого влияния.

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

Оглавление книги


Генерация: 1.130. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз