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

Страница 4 из 9



1.4. Управляющие конструкции

Определение управляющих конструкций в Java практически во всём совпадает с C++.

Условные конструкции if … else. Наиболее распространённой формой управляющих структур является конструкция if … else, синтаксис которой выглядит следующим образом:

if (БулевскоеВыражение) {

Инструкции1;

} else {

Инструкции2;

}

Сначала осуществляется проверка значения булевского выражения. Если результат равен true, выполняется блок Инструкции1, в противном случае (и при наличии предложения else) – блок Инструкции2. Предложение else может быть пропущено, при этом конструкция if … else принимает более краткий вид:

if (БулевскоеВыражение) {

Инструкции;

}

int m = 4;

if (m == 4) {

System.out.println("April");

}

run: April

В этом случае при ложном значении булевского выражения никаких операций не выполняется. Возможна также и вложенность конструкций if … else:

if (БулевскоеВыражение1) {

Инструкции1

} else if (БулевскоеВыражение2) {

Инструкции2

} else {

Инструкции3

}

int month = 4;

String season;

if (month == 12 || month == 1 || month == 2) {

season = "Winter";

} else if (month == 3 || month == 4 || month == 5) {

season = "Spring";

} else if (month == 6 || month == 7 || month == 8) {

season = "Summer";

} else if (month == 9 || month == 10 || month == 11) {

season = "Autumn";

} else {

season = "Bogus Month";

}

System.out.println("April is in the " + season + ".");

run: April is in the Spring.

Некоторым аналогом конструкции if … else является операция «?» со следующим синтаксисом:

БулевскоеВыражение ? Значение1 : Значение2

где Значение1, Значение2 – вычисляемые значения одного типа.

Результатом этой операции будет Значение1, если БулевскоеВыражение истинно, в противном случае –Значение2.

int m = 4; String season;

season = m == 4 ? "April" : "???";

System.out.println(season);

run: April

Условные конструкции switch – case. Конструкция switch позволяет передавать управление тому или иному блоку кода, обозначенному оператором case в зависимости от значения выражения:

switch (Выражение) {

case Значение1:

Инструкции;

case Значение2:

Инструкции;

default:

Инструкции;

}

Значение Выражения может иметь один из типов: byte, short, int, char. Каждому оператору case ставится в соответствие константа-значение. Если значение выражения совпадает со значением оператора case, то управление передаётся первой инструкции данного блока case.

Для выхода из конструкции после завершения инструкций блока используется команда break. Если не прервать исполнение командой break, то будет исполняться блок инструкций, соответствующий следующему значению.

Если значение выражения не совпало ни с одним из значений операторов case, то выполняется первая инструкция блока default. Если же метка default отсутствует, выполнение оператора switch завершается.

int month = 4;

String season;

switch (month) {

case 12:

case 1:

case 2:

season = "зима"; break;

case 3:

case 4:

case 5:

season = "весна"; break;

case 6:

case 7:

case 8:

season = "лето"; break;

case 9:

case 10:

case 11:

season = "осень"; break;

default:

season = "Нет такого месяца";

}



System.out.println("Апрель – это " + season + ".");

run: Апрель – это весна.

Циклы for. Выражение for применяется для организации циклического перехода по значениям из заданного диапазона и в общем виде выглядит так:

for (СекцияИнициализации; БулевскоеВыражение; Секция изменения) Инструкция;

Обработка цикла происходит в следующем порядке:

– инициализация;

– проверка условия завершения;

– исполнение тела цикла;

– инкрементация счётчика.

Все секции заголовка цикла for являются необязательными. Если СекцияИнициализации опускается, на её месте остаётся только символ точки с запятой. Если же из заголовка исключается БулевскоеВыражение, в качестве значения логического условия подразумевается литерал true. Исключение всех трёх секций приводит к тому, что цикл становится «бесконечным»:

for (;;) {

Инструкции;

}

for (int i = 1; i <= 10; i++) {

System.out.println("i = " + i);

}

run:

i = 1

i = 2

i = 3

i = 4

i = 5

i = 6

i = 7

i = 8

i = 9

i = 10

for (int n = 10; n > 0; n–) {

System.out.println("n= " + n);

}

run:

n= 10

n= 9

n= 8

n= 7

n= 6

n= 5

n= 4

n= 3

n= 2

n= 1

int a, b;

for (a = 1, b = 4; a < b; a++, b–) {

System.out.println("a = " + a);

System.out.println("b = " + b);

}

run:

a = 1

b = 4

a = 2

b = 3

Циклы while. Синтаксис циклической конструкции while выглядит так:

while (БулевскоеВыражение)

Инструкция;

int n = 5;

while (n > 0) {

System.out.println("while " + n);

n–;

}

run:

while 5

while 4

while 3

while 2

while 1

Сначала осуществляется проверка булевского выражения. Если результат равен true, выполняется Инструкция (в качестве инструкции может быть использован блок), после чего булевское выражение проверяется вновь, и процесс повторяется до тех пор, пока в результате проверки не будет получено значение false.

Циклы do … while. Если требуется исполнить тело цикла хотя бы 1 раз, используется конструкция do … while:

do

while (БулевскоеВыражение)

int n = 5;

do {

System.out.println("do-while " + n);

} while (–n > 0);

run:

do-while 5

do-while 4

do-while 3

do-while 2

do-while 1

В этом случае проверка истинности логического выражения осуществляется после выполнения тела цикла.

В теле циклов можно использовать две особые инструкции:

– break – применяется для завершения выполнения цикла;

– continue – передаёт управление в конец тела цикла (т.е. начинает следующую итерацию). В ситуациях с while и do это приводит к выполнению проверки условия цикла, а при использовании в теле for инструкция continue производит передачу управления секции изменения значения переменных цикла.