Операторы цикла. Цикл while. Цикл do-while
Операторы цикла Операторами цикла Java являются for, while и do-while. Эти операторы образуют конструкции, обычно называемые циклами. Как наверняка известно читателям, циклы многократно выполняют один и тот же набор инструкций до тех пор, пока не будет удовлетворено условие завершения цикла. Как вы вскоре убедитесь, Java предлагает средства создания циклов, способные удовлетворить любые потребности программирования. Цикл while Оператор while – наиболее часто используемый оператор цикла Java. Он повторяет оператор или блок операторов до тех пор, пока значение его управляющего выражения истинно. Он имеет следующую общую форму: while(условие){ //тело цикла } Условием может быть любое булевское выражение. Тело цикла будет выполняться до тех пор, пока условное выражение истинно. Когда условие становится ложным, управление передается строке кода, непосредственно следующей за циклом. Фигурные скобки могут быть опущены, только если в цикле повторяется только один оператор. В качестве примера рассмотрим цикл while, который выполняет обратный отсчет, начиная с 10, вывод ровно 10 строк “тактов”: // Демонстрация использования цикла while. class While { public static void main(String args[]) { int n = 10; while(n > 0) { System. out. println(" такт " + n); n--; } } } После запуска эта программа выводит десять “тактов”: такт 10 такт 9 такт 8 такт 7 такт 6 такт 5 такт 4 такт 3 такт 2 такт 1 Поскольку цикл while вычисляет свое условное выражение в начале цикла, тело цикла не будет выполнено ни разу, если в самом начале условие оказывается ложным. Например, в следующем фрагменте кода метод println() никогда не будет вызван: int a = 10, b = 20; while(a > b) System. out. println(" Эта строка отображаться не будет" );
Тело цикла while (или любого другого цикла Java) может быть пустым. Это обусловлено тем, что синтаксис Java допускает применение нулевого оператора (содержащего только символ точки с запятой). Например, рассмотрим следующую программу: // Целевая часть цикла может быть пустой. class NoBody { public static void main(String args[]) { int i, j; i = 100; j = 200; // вычисление среднего значения i и j while(++i < --j); // в этом цикле тело цикла отсутствует System. out. println(" Среднее значение равно " + i); } } Эта программа вычисляет среднее значение i и j. Она генерирует следующий вывод: Среднее значение равно 150 Этот цикл while работает следующим образом. Значение i увеличивается, а значение j уменьшается на единицу. Затем программа сравнивает эти два значения. Если новое значение i по-прежнему меньше нового значения j, цикл повторяется. Если значение i равно или больше значения j, выполнение цикла прекращается. По выходу из цикла переменная i будет содержать среднее значение исходных значений i и j. Конечно, эта процедура работает только в том случае, если в самом начале значение i меньше значения j. Как видите, никакой потребности в наличии тела цикла не существует. Все действия выполняются внутри самого условного выражения. В профессионально написанном Javaкоде короткие циклы часто не содержат тела, если само по себе управляющее выражение может выполнять все необходимые действия. Цикл do-while Как вы видели, если в начальный момент условное выражение, управляющее циклом while, ложно, тело цикла вообще не будет выполняться. Однако иногда желательно выполнить тело цикла хотя бы один раз, даже если в начальный момент условное выражение ложно. Иначе говоря, существуют ситуации, когда проверку условия прерывания цикла желательно выполнять в конце цикла, а не в его начале. К счастью, Java поддерживает именно такой цикл: do-while. Этот цикл всегда выполняет тело цикла хотя бы один раз, поскольку его условное выражение проверяется в конце цикла. Общая форма цикла do-while следующая:
do { // тело цикла } while (условие); При каждом повторении цикла do-while программа вначале выполняет тело цикла, а затем вычисляет условное выражение. Если это выражение истинно, цикл повторяется. В противном случае выполнение цикла прерывается. Как и во всех циклах Java, выражение должно быть булевским. Ниже приведена измененная программа вывода тактов, которая демонстрирует использование цикла do-while. Она генерирует такой же вывод, что и предыдущая версия. // Демонстрация использования цикла do-while. class DoWhile { public static void main(String args[]) { int n = 10; do { System. out. println(" такт " + n); n--; } while(n > 0); } } Хотя с технической точки зрения в приведенной программе цикл записан правильно, его можно переписать в более эффективном виде: do { System. out. println(" такт " + n); } while(--n > 0); В этом примере операции декремента переменной n и сравнения результирующего значения с нулем объединены в одном выражении (--n> 0). Программа работает следующим образом. Вначале она выполняет оператор --n, уменьшая значение n на единицу и возвращая новое значение переменной n. Затем программа сравнивает это значение с нулем. Если оно больше нуля, выполнение цикла продолжается. В противном случае цикл прерывается. Цикл do-while особенно удобен при выборе пункта меню, поскольку обычно в этом случае требуется, чтобы тело цикла меню выполнялось, по меньшей мере, один раз. Рассмотрим следующую программу, которая реализует очень простую систему справки по операторам выбора и цикла Java: // Использование цикла do-while для выбора пункта меню class Menu { public static void main(String args[]) throws java. io. IOException { char choice; do { System. out. println(" Справка по: " ); System. out. println(" 1. if" ); System. out. println(" 2. switch" ); System. out. println(" 3. while" ); System. out. println(" 4. do-while" ); System. out. println(" 5. for\n" ); System. out. println(" Выберите интересующий пункт: " ); choice = (char) System. in. read(); } while( choice < '1' || choice > '5'); System. out. println(" \n" ); switch(choice) { case '1': System. out. println(" if: \n" ); System. out. println(" if(условие) оператор; " ); System. out. println(" else оператор; " ); break; case '2': System. out. println(" switch: \n" ); System. out. println(" switch(выражение) {" );
System. out. println(" case константа: " ); System. out. println(" последовательность операторов" ); System. out. println(" break; " ); System. out. println(" //... " ); System. out. println(" }" ); break; case '3': System. out. println(" while: \n" ); System. out. println(" while(условие) оператор; " ); break; case '4': System. out. println(" do-while: \n" ); System. out. println(" do {" ); System. out. println(" оператор; " ); System. out. println(" } while (условие); " ); break; case '5': System. out. println(" for: \n" ); System. out. print(" for(инициализация; условие; повторение)" ); System. out. println(" оператор; " ); break; } } }
Пример вывода выполнения этой программы выглядит следующим образом: Справка по: 1. if 2. switch 3. while 4. do-while 5. for Выберите интересующий пункт: 4 do-while: do { оператор; } while (условие); В этой программе в цикле do-while осуществляется проверка допустимости введенного пользователем значения. Если это значение недопустимо, программа предлагает пользователю повторить ввод. Поскольку меню должно отобразиться, по меньшей мере, один раз, цикл do-while является прекрасным средством решения этой задачи. Отметим еще несколько особенностей приведенного примера. Обратите внимание, что считывание символов с клавиатуры выполняется посредством вызова метода System. in. read(). Это – одна из функций консольного ввода Java. В данном случае метод System. in. read() используется для выяснения выбора, осуществленного пользователем. Этот метод считывает символы из стандартного ввода (возвращаемые в виде целочисленных значений – именно потому тип возвращаемого значения был приведен к char). Консольный ввод Java может вызывать некоторые затруднения при работе. Более того, большинство реальных Java-программ будут графическими и ориентированным на работу в оконном режиме. Однако в данном случае он удобен. Еще один важный момент. Поскольку мы используем метод System. in. read(), программа должна содержать выражение throws java. io. IOException. Эта строка необходима для обработки ошибок ввода. Она является составной частью системы обработки исключений Java, которая будет рассмотрена в главе 10.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|