Добавить в цитаты Настройки чтения

Страница 53 из 502

<b>      if((num%i) == 0) {</b>

<b>        factor = i;</b>

<b>        break; // прервать цикл, как только будет</b>

<b>        // выявлен наименьший множитель числа</b>

<b>      }</b>

<b>    }</b>

<b>    Console.WriteLine(&quot;Наименьший множитель равен &quot; + factor);</b>

<b>  }</b>

<b>}</b>

Результат выполнения этой программы выглядит следующим образом.

<b>Наименьший множитель равен 2</b>

Оператор break прерывает выполнение цикла for, как только будет выявлен наименьший множитель числа. Благодаря такому применению оператора break исключается опробование любых других значений после выявления наименьшего множителя числа, а следовательно, и неэффективное выполнение кода.

Если оператор break применяется в целом ряде вложенных циклов, то он прерывает выполнение только самого внутреннего цикла. В качестве примера рассмотрим следующую программу.

<b>// Применить оператор break во вложенных циклах, </b>

<b>using System;</b>

<b>class BreakNested { </b>

<b>  static void Main() {</b>

<b>    for(int i=0; i&lt;3; i++) {</b>

<b>      Console.WriteLine(&quot;Подсчет во внешнем цикле: &quot; + i);</b>

<b>      Console.Write(&quot;    Подсчет во внутреннем цикле: &quot;);</b>

<b>      int t = 0; </b>

<b>      while(t &lt; 100) </b><b>{</b>

<b>        if(t == 10) break; // прервать цикл, если t равно 10 </b>

<b>        Console.Write(t + &quot; &quot;); t++;</b>

<b>      }</b>

<b>      Console.WriteLine();</b>

<b>    }</b>

<b>    Console.WriteLine(&quot;Циклы завершены.&quot;);</b>

<b>  }</b>

<b>}</b>

Выполнение этой программы дает следующий результат.

<b>Подсчет во внешнем цикле: 0</b>

<b>    Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 7 8 9 </b>

<b>Подсчет во внешнем цикле: 1</b>

<b>    Подсчет во внутреннем цикле: 0 1 2 3 4 5 б 7 8 9 </b>

<b>Подсчет во внешнем цикле: 2</b>

<b>    Подсчет во внутреннем цикле: 0 1 2 3 4 5 6 7 8 9 </b>

<b>Циклы завершены</b>

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

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

Применение оператора continue

С помощью оператора continue можно организовать преждевременное завершение шага итерации цикла в обход обычной структуры управления циклом. Оператор continue осуществляет принудительный переход к следующему шагу цикла, пропуская любой код, оставшийся невыполненным. Таким образом, оператор continue служит своего рода дополнением оператора break. В приведенном ниже примере программы оператор continue используется в качестве вспомогательного средства для вывода четных чисел в пределах от 0 до 100.

<b>// Применить оператор continue, </b>

<b>using System;</b>

<b>class ContDemo {</b>

<b>  static void Main() {</b>

<b>    // вывести четные числа от 0 до 100. </b>

<b>    for (int i = 0; i &lt;= 100; i++) {</b>

<b>      if((i%2) != 0) continue; // перейти к следующему шагу итерации</b>

<b>      Console.WriteLine(i);</b>

<b>    }</b>

<b>  }</b>

<b>}</b>

В данном примере выводятся только четные числа, поскольку при обнаружении нечетного числа шаг итерации цикла завершается преждевременно в обход вызова метода WriteLine().

В циклах while и do-while оператор continue вызывает передачу управления непосредственно условному выражению, после чего продолжается процесс выполнения цикла. А в цикле for сначала вычисляется итерационное выражение, затем условное выражение, после чего цикл продолжается.

Оператор continue редко находит удачное применение, в частности, потому, что в C# предоставляется богатый набор операторов цикла, удовлетворяющих большую часть прикладных потребностей. Но в тех особых случаях, когда требуется преждевременное прерывание шага итерации цикла, оператор continue предоставляет структурированный способ осуществления такого прерывания.