Меню сайта

Урок 6. Управление выполнением программы в Java ( 2 часть )

Циклы

Любой цикл можно разделить на 4 части — —инициализацию, тело, итерацию и -условие -завершения. -В Java есть три циклические конструкции: while -(с пред-условием), do-while -(с пост-условием) -и for -(с параметровм).

while

Этот цикл многократно выполняется -до тех пор, пока значение логического выражения равно true. Ниже приведена общая форма оператора while:

[ инициализация- ]

while ( завершение ) -{

тело-

[итерация-] }

Инициализация и итерация необязательны. Ниже приведен пример цикла while для печати десяти строк «tick».

class WhileDemo {

public static void main(String args[]) {

int n = 10-

while (n &gt- 0) {

System.out.println(«tick » + n)-

n—

}

} }

do-while

Иногда возникает потребность выполнить тело цикла по крайней мере один раз — даже в том случае, когда логическое выражение с самого на­чала принимает значение false. Для таких случаев в Java используется цикли­ческая конструкция do-while. Ее общая форма записи такова:

[ инициализация- ] do { тело- [итерация-] } while ( завершение )-

В следующем примере тело цикла выполняется до первой проверки условия завершения. Это позволяет совместить код итерации с условием — завершения:

class DoWhile {

public static void main(String args[]) {

int n = 10-

do {

System.out.println(«tick » + n)-

} while (—n &gt- 0)-

} }

for

В этом операторе предусмотрены места для всех четырех частей цикла. Ниже приведена общая форма оператора записи for.

for ( инициализация- завершение- итерация ) тело-

Любой цикл, записанный с помо­щью оператора for, можно записать в виде цикла while, и наоборот. Если начальные условия таковы, что при входе в цикл условие за­вершения не выполнено, то операторы тела и итерации не выполняются ни одного раза. В каноническая форме цикла for происходит увеличение целого значения счетчика с минимального значения до определенного предела.

class ForDemo {

public static void main(String args[]) {

for (int i = 1- i &lt-= 10- i++)

System.out.println(«i = » + i)-

} }

Следующий пример — вариант программы, ведущей обратный отсчет.

class ForTick {

public static void main(String args[]) {

for (int n = 10- n &gt- 0- n—)

System.out.println(«tick » + n)-

} }

Обратите внимание — переменные можно объявлять внутри раздела инициализации оператора for. Переменная, объявленная внутри опера­тора for, действует в пределах этого оператора.

А вот — новая версия примера с временами года, в которой исполь­зуется оператор for.

class Months {

static String months[] = {

«January», «February», «March», «April», «May», «June», «July», «August», «September», «October», «November», «December» }-

static int monthdays[] -= { 31, 28, -31, 30, 31, -30, 31, 31, 30, 31, 30, 31 }-

static String spring = «spring»-

static String summer = «summer»-

static String autumn = «autumn»-

static String winter = «winter»-

static String seasons[] -= { winter, winter, spring, spring, spring, summer, summer, summer, autumn, autumn, autumn, winter — }-

public static void main(String args[]) {

for (int month = 0- month &lt- 12- month++) {

System.out.println(months[month] + » is a » -+

seasons[month] + » month with » + monthdays[month] + » days.»)-

} } }

При выполнении эта программа выводит следующие строки:

С:&#92-&gt- Java Months

January is a winter month with 31 days.

February is a winter month with 28 days.

March is a spring month with 31 days.

April is a spring month with 30 days.

May is a spring month with 31 days.

June is a summer month with 30 days.

July is a summer month with 31 days.

August is a summer month with 31
days.

September is a autumn month with 30 days.

October is a autumn month with 31 days.

November is a autumn month with 30 days.

December a winter month with 31 days.

Оператор запятая

Иногда возникают ситуации, когда разделы инициализации или ите­рации цикла for требуют нескольких операторов. Поскольку составной оператор в фигурных скобках в заголовок цикла for вставлять нельзя, Java предоставляет альтернативный путь. Применение запятой (,) для разделения нескольких операторов допускается только внутри круглых скобок оператора for. Ниже приведен тривиальный пример цикла for, в котором в разделах инициализации и итерации стоит несколько операторов.

class Comma {

public static void main(String args[]) {

int a, b-

for (a = 1, b = 4- a &lt- b- a++, b—) {

System.out.println(«a = » + a)-

System.out.println(«b = » + b)-

}

} }

Вывод этой программы показывает, что цикл выполняется всего два раза.

С: &#92-&gt- java Comma

а = 1

b = 4

а = 2

b = 3

continue

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

class ContinueDemo {

public static void main(String args[]) {

for (int i=0- i &lt- 10- i++) {

System.out.print(i + » «)-

if (i % 2 == 0) continue-

System.out.println(«»)-

}

}}

Если индекс четный, цикл продолжается без вывода символа новой строки. Результат выполнения этой программы таков:

С: -&#92-&gt- java ContinueDemo

0 1

2 3

4 5

5 7

8 9

Как и в случае оператора break, в операторе continue можно задавать метку, указывающую, в каком из вложенных циклов вы хотите досроч­но прекратить выполнение текущей итерации. Для иллюстрации служит программа, использующая оператор continue с меткой для вывода треугольной таблицы умножения для чисел от 0 до 9:

class ContinueLabel {

public static void main(String args[]) {

outer: -for (int i=0- i &lt- 10- i++) {

for (int j = 0- j&lt- 10- j++) {

if (j &gt- i) {

System.out.println(«»)-

continue outer-

}

System.out.print(» » + (i * j))-

}

}

}}

Оператор continue в этой программе приводит к завершению внутрен­него цикла со счетчиком j и переходу к очередной итерации внешнего цикла со счетчиком i. В процессе работы эта программа выводит сле­дующие строки:

С:&#92-&gt- Java ContinueLabel

0

0 1

0 2 4

0 3 6 9

0 4 8 12 16

0 5 10 15 20 25

0 6 12 18 24 30 36

0 7 14 21 28 35 42 49

0 8 16 24 32 40 48 56 64

0 9 18 27 36 45 54 63 72 81

Исключения

Последний способ вызвать передачу управления при выполнении кода — использование встроенного в Java механизма обработки исклю­чительных ситуаций. Для этой цели в языке предусмотрены операторы try, catch, throw и finally. -Глава 10 -целиком посвящена -изучению механизма обработки исключительных ситуаций.

Вниз по течению

В последних четырех главах вы узнали о Java довольно много. -Если бы это была книга по Фортрану, курс обучения можно было считать закончен­ным. Однако по сравнению с Фортраном Java обладает дополнительными широкими возможностями. Поэтому давайте будем двигаться дальше и перейдем, наконец, к объектно-ориентированному программированию.

Категория: Обучение Java | Дата: 16.04.13

Меню раздела
Блок