Выбрать главу

Не следует, однако, забывать, что в операторе break нельзя использовать метку, не определенную в объемлющем его цикле. Например, приведенный ниже фрагмент кода некорректен и не подлежит компиляции. // Этот фрагмент кода содержит ошибку, class BreakErr { public static void main(String args[]) { one: for(int i=0; i<3; i++) { System.out.print("Pass " + i + ” : ") ; } for(int j=0; j<100; j++) { if(j == 10) break one; // НЕВЕРНО! System, out .print (j + " 11 ); } }

Кодовый блок, обозначенный меткой one, не содержит оператор break, и поэтому управление не может быть передано этому блоку. Применение оператора continue

С помощью оператора continue можно организовать преждевременное завершение шага итерации цикла в обход обычной структуры управления циклом. Оператор continue осуществляет принудительный переход к следующему шагу цикла, пропуская любой код, оставшийся невыполненным. Таким образом, оператор continue служит своего рода дополнением оператора break. В приведенном ниже примере программы оператор continue используется в качестве вспомогательного средства для вывода четных чисел в пределах от 0 до 100. // Применение оператора continue. class ContDemo { public static void main(String args[]) { int i; // вывести четные числа в пределах от 0 до 100 for(i = 0; i<=100; i++) { if((i%2) != 0) continue; // завершить шаг итерации цикла System.out.println(i); } } }

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

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

Как и в операторе break, в операторе continue может присутствовать метка, обозначающая тот объемлющий цикл, выполнение которого должно быть продолжено. Ниже приведен пример программы, демонстрирующий применение оператора continue с меткой. // Применить оператор continue с меткой, class ContToLabel { public static void main(String args[]) { outerloop: for(int i=l; i < 10; i++) { System.out.print("\nOuter loop pass " + i + ", Inner loop: "); for(int j = 1; j < 10; j++) { if(j == 5) continue outerloop; // продолжить внешний цикл System.out.print (j); } } } }

Выполнение этой программы дает следующий результат: Outer loop pass 1, Inner loop: 1234 Outer loop pass 2, Inner loop: 1234 Outer loop pass 3, Inner loop: 1234 Outer loop pass 4, Inner loop: 1234 Outer loop pass 5, Inner loop: 1234 Outer loop pass 6, Inner loop: 1234 Outer loop pass 7, Inner loop: 1234 Outer loop pass 8, Inner loop: 1234 Outer loop pass 9, Inner loop: 1234

Как следует из приведенного выше примера, при выполнении оператора continue управление передается внешнему циклу, и оставшиеся итерации внутреннего цикла пропускаются.

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

Пример для опробования 3.3. Завершение построения справочной системы Java

В этом проекте предстоит завершить построение справочной системы Java, начатое в предыдущих проектах. Данная версия будет дополнена сведениями о синтаксисе операторов break и continue, а также даст пользователю возможность запрашивать сведения о синтаксисе нескольких операторов. Эта цель достигается путем добавления внешнего цикла, который выполняется до тех пор, пока пользователь не введет с клавиатуры букву q вместо номера пункта меню.

Последовательность действий

Скопируйте файл Help2.java в новый файл Help3.java.

Поместите весь исходный код программы в бесконечный цикл for. Выход из этого цикла будет осуществляться с помощью оператора break, который получит управление тогда, когда пользователь введет с клавиатуры букву q. А поскольку этот цикл включает в себя весь код, то выход из него означает завершение программы.

Измените цикл отображения меню так, как показано ниже.do { System.out.println('1. if"); System.out.println('2. switch"); System.out.println('3. for"); System.out.println('4. while"); System.out.println('5. do-while"); System.out.println('6. break"); System.out.println('7. continue\n") System.out.println('Help on:"); System.out.print("Choose one (q to quit): choice = '(char) System.in.read(); do { ignore = (char) System.in.read(); } while(ignore != f\n'); } while( choice < '1' | choice > '7' & choice != ' q1); Как видите, цикл теперь включает в себя операторы break и continue. Кроме того, буква q воспринимается в нем как допустимый вариант выбора.

Дополните оператор switch операторами break и continue, как показано ниже. case '6': System.out.println("The break:\n"); System.out.println("break; or break label;"); break; case ’71: System.out.println("The continue:\n"); System.out.println("continue; or continue label;"); break;

Ниже приведен весь исходный код программы из файла Help3.java. /* Пример для опробования 3.3. Завершенная справочная система по управляющим операторам Java, обрабатывающая многократные запросы. */ class Не1рЗ { public static void main(String args[]) throws java.io.IOException { char choice, ignore; for(;;) { do { System.out.println("Help on:"); System.out.println(" 1. if"); System.out.println(" 2. switch"); System.out.println(" 3. for"); System.out.println(" 4. while"); System.out.println(" 5. do-while"); System.out.println(" 6. break"); System.out.println(" 7. continue\n"); System.out.print("Choose one (q to quit): "); choice = (char) System.in.read(); do { ignore = (char) System.in.read(); } while(ignore != '\n'); } while( choice < '1' | choice > '7' & choice != 'q'); if (choice == 'q') break; System.out.println("\n"); switch(choice) { case '1' : System.out.println("The if:\n"); System.out.println("if(condition) statement;"); System.out.println("else statement;"); break; case '2': System.out.println("The switch:\n"); System.out.println("switch(expression) {"); System.out.println(" case constant:"); System.out.println(" statement sequence"); System.out.println(" break;"); System, out .println (11 // ..."); System.out.println("}"); break; case '3' : System.out.println("The for:\n"); System.out.print("for(init; condition; iteration)"); System.out.println(" statement;"); break; case '4' : System.out.println("The while:\n"); System.out.println("while(condition) statement;"); break; case '5': System.out.println("The do-while:\n"); System.out.println("do {"); System.out.println(" statement;"); System.out.println("} while (condition);"); break; case '6' : System.out.println("The break:\n"); System.out.println("break; or break label;"); break; case '7': System.out.println("The continue:\n"); System.out.println("continue; or continue label;"); break; } System.out.println(); } } }

Ниже приведен один из возможных вариантов выполнения данной программы в диалоговом режиме. Help on: 1. if 2. switch 3. for 4. while 5. do-while 6. break 7. Continue Choose one (q to quit): 1 The if: if(condition) statement; else statement; Help on: 1. if 2. switch 3. for 4. while 5. do-while 6. break 7. Continue Choose one (q to quit): 6 The break: break; or break label; Help on: 1. if 2. switch 3. for 4. while 5. do-while 6. break 7. Continue Choose one (q to quit): q Вложенные циклы

Как следует из предыдущих примеров программ, один цикл может быть вложен в другой. С помощью вложенных циклов решаются самые разные задачи. Поэтому, прежде чем завершить рассмотрение циклов в Java, уделим еще немного внимания вложенным циклам. Ниже приведен пример программы, содержащей вложенные циклы for. С помощью этих циклов для каждого числа от 2 до 100 определяется ряд множителей, на которые данное число делится без остатка. /* Использовать вложенные циклы для выявления множителей чисел от 2 до 100. */ class FindFac { public static void main(String args[]) { for(int i=2; i <= 100; i++) { System.out.print("Factors of " + i + ": ") ; for(int j = 2; j < i; j++) if((i%j) == 0) System.out.print(j + " "); System.out.println() ; } } }