Презентация по Программированию. Книга Программирование на Java для начинающих
Скачать 4.47 Mb.
|
) { операторы-для-выполнения-на-каждой-итерации ; } Скобки после ключевого слова for должны содержать три управляю- щих выражения, которые и определяют действие цикла. • Инициализация — присваивает начальное значение переменной- счетчику , который будет подсчитывать число итераций цикла. Переменная для этих целей может быть объявлена прямо здесь, и обычно это самая простая целочисленная переменная с именем i. • Проверочное выражение — данное выражение оценивается в на- чале каждой итерации цикла на предмет логического значения true. Когда оценка возвращает значение true, итерация продолжается, а при возвращении значения false цикл немедленно прекращает свою работу, не завершая текущую итерацию. • Итерация — изменяет текущее значение переменной-счетчика, храня в себе общее число итераций, сделанных циклом. Обычно здесь используется выражение i++ для увеличения либо i-- для уменьшения значения счетчика. Исполняемый на каждой итерации цикла код может быть как одиноч- ным оператором, так и блоком операторов и даже вложенным циклом. Каждый цикл в какой-то определенной точке должен привести зна- чение проверочного выражения в значение false, иначе будет создан так называемый бесконечный цикл. В общем случае проверочное вы- ражение обычно оценивает текущее значение переменной-счетчика для выполнения определенного количества итераций. Например, если проинициализировать счетчик i значением 1 и увеличивать его на еди- ницу с каждой итерацией, то после 10 итераций значение выражения i < 11 станет ложным. Таким образом, цикл, исполнившись 10 раз, завершится. На заметку Итерацию часто называют счетчиком приращений, поскольку чаще всего она используется для увели- чения значения, а не для уменьшения. 53 1. Создайте новую программу с именем For, содержащую стандарт- ный метод main. class For { public static void main ( String[] args ) { } } 2. Внутри главного метода объявите и проинициализируйте целочис- ленную переменную для подсчета общего числа итераций. int num = 0 ; 3. Добавьте цикл for , выполняющий три итерации и отображающий текущее значение своего счетчика-переменной i на каждой ите- рации. for ( int i = 1 ; i < 4 ; i++ ) { System.out.println( "Внешний цикл i=" + i ) ; } 4. Внутри блока цикла for добавьте вложенный цикл for, который также выполняет три итерации, отображая текущее значение счетчика-переменной j и общее число итераций. for ( int j = 1 ; j < 4 ; j++ ) { System.out.print( "\tВнутренний цикл j=" + j ) ; System.out.println( "\t\tВсего num="+ (++num) ) ; } 5. Сохраните программу под именем For.java, затем скомпилируйте и запустите, чтобы увидеть вывод. JAVA For.java Внимание Операторы инкремента и декремента могут быть как префиксными , так и пост- фиксными . В первом случае они вначале увеличивают значение переменной, а за- тем происходит обращение к ней, во втором случае — наоборот. 3. С оздание опера т оров 54 Цикл while Альтернативной структурой для цикла for является структура цикла, использующая ключевое слово while и имеющая следующий синтак- сис: while ( проверочное-выражение ) { операторы-для-выполнения-на-каждой-итерации ; } Подобно циклу for цикл while тоже с периодичностью выполняет со- держащиеся в нем операторы до тех пор, пока проверочное условие не будет иметь значение true. В этом случае цикл завершает свою работу, и программа переходит к следующей задаче. В отличие от цикла for, в скобках после ключевого слова while не содержится ни инициализатора, ни модификатора , изменяющего переменную-счетчик. Это означает, что в проверочном выражении должна находиться какая-то величина, которая будет изменяться по мере выполнения итераций цикла, иначе будет создан бесконечный цикл , выполняющий свои операторы. Проверочное выражение оценивается в начале каждой итерации цикла на предмет логического значения true. Если результат проверки воз- вращает true, итерация продолжается, в противном случае цикл не- медленно завершается, не выполняя итерацию. Обратите внимание, что если проверочное выражение возвращает зна- чение false при самой первой оценке, то операторы цикла никогда не исполнятся. При помощи цикла while можно смоделировать структуру цикла for, при этом в проверочном выражении будет оцениваться переменная- счетчик, которая станет создаваться вне цикла, а изменять свое значе- ние внутри цикла на каждой его итерации. Например, внешний цикл for из предыдущего примера можно воссоздать при помощи цикла while следующим образом: int i = 1 ; while ( i < 4 ) { System.out.println( "Внешний цикл i=" +i ) ; i++ ; } Внимание Бесконечный цикл заблоки- рует программу, поскольку итерации продолжают выполняться — в системе Windows, чтобы выйти из этой ситуации, нажмите со- четание клавиш Ctrl+C. 55 Таким образом, мы переместили инициализатор снаружи цикла перед структурой while, а модификатор — внутри блока операторов самого цикла. 1. Создайте новую программу с именем While, содержащую стандарт- ный метод main. class While { public static void main ( String[] args ) { } } 2. Внутри главного метода объявите и проинициализируйте целочис- ленную переменную с именем num. int num = 100 ; 3. Добавьте цикл while , который будет отображать текущее значение переменной num, пока оно остается больше нуля. while ( num > 0 ) { System.out.println( "Обратный отсчет с использованием While: " + num ) ; } 4. В конец блока while добавьте модификатор, чтобы уменьшать зна- чение переменной num на 10 на каждой итерации, тем самым избе- гая бесконечного цикла. num -= 10 ; 5. Сохраните программу под именем While.java, затем скомпилируйте и запустите. JAVA While.java На заметку Присваивание в данном модификаторе — это со- кращенная запись для num = (num - 10). 3. С оздание опера т оров 56 Циклы do-while Одной из вариаций структуры цикла while, описанной на предыдущей странице, является цикл, использующий ключевое слово do и имею- щий следующий синтаксис: do { операторы-для-выполнения-на-каждой-итерации ; } while ( проверочное-выражение ) ; Подобно циклам for и while, цикл do-while с периодичностью выпол- няет содержащиеся в нем операторы до тех пор, пока проверочное вы- ражение не примет значение true — затем цикл завершает свою работу и программа переходит к следующей задаче. В отличие от циклов for и while, в цикле do-while проверочное выра- жение стоит после блока, содержащего выполняющиеся в цикле опера- торы. Проверочное выражение оценивается в конце каждой итерации цикла на предмет логического значения. Когда проверочное выраже- ние в результате возвращает значение true, продолжается следующая итерация, в противном случае цикл немедленно завершается. Это озна- чает, что операторы внутри цикла do-while исполнятся, по крайней мере, один раз. Обратите внимание, что если проверочное выражение возвратит значение false при первой его оценке, то операторы цикла при этом уже один раз выполнены. С помощью цикла do-while можно также смоделировать структуру цикла for, оценивая переменную-счетчик в его проверочном выраже- нии, при этом инициализатор будет находиться вне цикла, а модифика- тор — внутри блока операторов, точно так же, как в цикле while. Для всех видов циклов for, while и do-while, если они содержат только один оператор для исполнения, можно опускать фигурные скобки во- круг этого оператора. Но если вы захотите добавить дополнительные операторы, то обойтись без скобок не получится. Какой из циклов — for, while или do-while — выбрать при програм- мировании, зависит от персональных предпочтений и от того, для чего используется цикл. Структура цикла for удобно размещает ини- циализатор, проверочное выражение и модификатор (после ключевого слова for). Структура цикла while может быть более лаконичной, но вы не должны забывать включить модификатор в операторы цикла во избежание его зацикливания. Цикл do-while просто добавляет воз- можность исполнения своего блока операторов хотя бы один раз перед Совет Операторы, исполняемые в цикле, всегда заключайте в скобки — это внесет яс- ность и улучшит обслужи- ваемость кода. 57 оценкой проверочного выражения — как демонстрируется в примере ниже. 1. Создайте новую программу с именем DoWhile, содержащую стан- дартный метод main. class DoWhile { public static void main ( String[] args ) { } } 2. Внутри главного метода добавьте объявление и инициализацию целочисленной переменной с именем num. int num = 100 ; 3. Добавьте цикл do-while для вывода текущего значения перемен- ной num, пока оно меньше нуля. do { System.out.println( "Используем DoWhile: " + num ) ; } while ( num < 0 ) 4. Добавьте в конец блока do-while модификатор для изменения зна- чения переменной num на каждой итерации, тем самым избежав бесконечного цикла. num += 10 ; 5. Сохраните программу под именем DoWhile.java, затем скомпили- руйте и запустите — вы увидите, что проверочное условие не вы- полняется, но оператор в цикле выполняется один раз. JAVA DoWhile.java На заметку Присваивание в этом моди- фикаторе является сокра- щенной записью для num = (num + 10). 3. С оздание опера т оров 58 Выход из циклов Ключевое слово break может применяться для преждевременного пре- рывания цикла при определенном условии. Оператор break располага- ется внутри блока операторов цикла и предваряется проверочным вы- ражением. Когда проверка возвращает значение true, цикл немедленно завершается и программа переходит к следующей задаче. Например, в случае вложенного цикла происходит переход к следующей итерации внешнего цикла. 1. Создайте новую программу с именем Break, содержащую стандарт- ный метод main. class Break { public static void main ( String[] args ) { } } 2. Внутри главного метода создайте два вложенных цикла for. Эти циклы будут отображать значение своих счетчиков на каждой из трех итераций. for ( int i = 1 ; i < 4 ; i++ ) { for ( int j = 1 ; j < 4 ; j++ ) { System.out.println( "Итерация i="+i+" j="+j ) ; } } 3. Сохраните программу под именем Break.java, затем скомпилируйте и запустите, чтобы увидеть вывод. Здесь выполняются три итерации внешнего цикла, и на каждой ис- полняется внутренний цикл. Чтобы остановить второе исполнение внутреннего цикла, можно добавить оператор break. JAVA Break.java 59 4. Добавьте оператор break в начало блока операторов внутреннего цикла, чтобы выполнить выход из этого цикла, затем перекомпи- лируйте и запустите заново программу. if ( i == 2 && j == 1 ) { System.out.println( "Выход из внутреннего цикла при i=" +i+ " j=" +j ) ; break ; } Существует возможность пропустить одну итерацию цикла при определенном условии — для этого используется ключевое слово continue . Оператор continue располагается внутри блока операто- ров цикла и также предваряется проверочным выражением. Если проверка выдает значение true, то данная итерация завершается. 5. Добавьте оператор continue в начало блока операторов внутренне- го цикла, чтобы пропустить первую итерацию внутреннего цикла, затем перекомпилируйте и запустите заново программу. if ( i == 1 && j == 1 ) { System.out.println( "Продолжение работы внутреннего цикла при i=" +i+ " j=" +j ) ; continue; } На заметку В данном случае оператор break пропускает все три итерации внутреннего цикла на второй итерации внешне- го цикла. На заметку В данном случае оператор continue позволяет пропу- стить первую итерацию вну- треннего цикла на первой итерации внешнего цикла. 3. С оздание опера т оров 60 Возврат управления Стандартное поведение операторов break и continue может быть изме- нено, если указать явно, что управление следует передать помеченному оператору цикла, указав имя его метки. 1. Создайте новую программу с именем Label, содержащую стандарт- ный метод main. class Label { public static void main ( String[] args ) { } } 2. Внутри главного метода создайте два вложенных цикла for, которые выводят значения своих счетчиков на каждой из трех ите раций. for ( int i = 1 ; i < 4 ; i++ ) { for ( int j = 1 ; j < 4 ; j++ ) { System.out.println( "Итерация i="+i+ " j="+j ) ; } } 3. Сохраните программу под именем Label.java, затем скомпилируйте и запустите. Для того чтобы пометить цикл, перед ним ставится имя метки и символ двоеточия. 4. Отредактируйте начало внешнего цикла, пометив его меткой outerLoop outerLoop : for ( int i = 1 ; i < 4 ; i++ ) JAVA Label.java 61 Чтобы явно указать программе, что нужно перейти к этому внеш- нему циклу, поставьте имя данной метки после ключевого слова continue 5. Добавьте оператор continue в начало блока операторов внутренне- го цикла, чтобы перейти к следующей итерации внешнего цикла, затем перекомпилируйте и запустите заново программу. if ( i == 1 && j == 1 ) { System.out.println( "outerLoop продолжает работу при i=" +i+ " j=" +j ) ; continue outerLoop ; } Для явного указания того, что программа должна выйти из внеш- него цикла, введите после ключевого слова break имя этой метки. 6. Добавьте оператор break в начало блока операторов внутреннего цикла для выхода из внешнего цикла, затем снова скомпилируйте и запустите программу. if ( i == 2 && j == 3 ) { System.out.println( "Выход из outerLoop при i=" +i+ " j=" +j ) ; break outerLoop ; } На заметку В данном случае оператор continue пропускает все три итерации первого прохода внутреннего цикла, возвра- щая управление внешнему циклу. На заметку В данном случае опера- тор break пропускает все дальнейшие итерации всей структуры цикла, совершая выход из внешнего цикла. 3. С оздание опера т оров 62 Заключение • Ключевое слово if используется для оценки проверочного выра- жения на предмет логических значений true или false. • Блок операторов if может содержать один или более операторов, которые выполняются только тогда, когда проверочное выражение возвращает значение true. • Ключевое слово else определяет альтернативные операторы для выполнения программы в случае, когда проверка, выполняемая ключевым словом if, возвращает значение false. • Комбинация операторов if else позволяет программе осущест- влять условное ветвление. • Оператор switch в большинстве случаев предлагает хорошую аль- тернативу операторам if else, предоставляя различные опции для выбора. • Каждая опция case может быть завершена ключевым словом break, и, таким образом, выполняться будут только операторы, связанные с этой опцией. • Ключевое слово default может определять операторы, исполняе- мые в случае, когда все опции case возвращают значение false. • Цикл с периодичностью исполняет операторы, содержащиеся в нем, до тех пор, пока проверочное выражение не возвратит зна- чение false. • После ключевого слова for в скобках указываются инициализатор, проверочное выражение и модификатор счетчика. • В циклах while и do-while во избежание входа в бесконечный цикл нужно изменять значение переменной, используемой в провероч- ном выражении. • В циклах for и while проверочное выражение оценивается в самом начале — перед первой итерацией цикла. • В циклах do-while проверочное выражение оценивается в конце цикла — после первой итерации. • Итерацию цикла можно пропустить с помощью ключевого слова continue • Используя ключевое слово break, можно завершать работу цикла. • Вложенные внутренние циклы могут использовать метки вместе с ключевыми словами break и continue, чтобы передавать управ- ление внешнему циклу. |