Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
А. Н. Васильев - Java. Объектно-ориентированное...doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
686.59 Кб
Скачать

Глава 2. Управляющие инструкции Java

Мы никогда ничего не запрещаем! Мы только советуем!

Из к/ф «Забытая мелодия для флейты»

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

Условная инструкция if()

Мой соперник не будет избран, если дела не пойдут хуже. А дела не пойдут хуже, если его не выберут.

Дж. Буш-старший

Если не считать тернарного оператора, в Java существует две условных кон- струкции, которые позволяют выполнять разные операции в зависимости от не- которого условия. В первую очередь рассмотрим условную инструкцию if(). Синтаксис ее вызова имеет в общем случае вид:

if(условие){инструкции_1} elase{инструкции_2}

Условная инструкция if() выполняется в следующей последовательности. Сна- чала проверяется условие, указанное в круглых скобках после ключевого сло- ва if. Если условие верное (значение соответствующего выражения равно true), выполняется блок инструкций, указанный сразу после инструкции if(условие) (в данном случае это инструкции_1). В противном случае, то есть если значение выражения в круглых скобках после ключевого слова if равно false, выполня- ется блок инструкций, указанных после ключевого слова else (в данном случае это инструкции_2). После выполнения условной инструкции управление пере- дается следующей после ней инструкции. Обращаем внимание читателя на не- сколько обстоятельств.

Во-первых, если любой из двух блоков инструкций состоит всего из одной ко- манды, фигурные скобки для соответствующего блока можно не использовать.

Тем не менее лишними фигурные скобки никогда не бывают, поскольку на быстродействии они не сказываются, а читабельность программы значительно улучшают.

Во-вторых, ветвь else условной инструкции не является обязательной. Синтак- сис вызова такой упрощенной формы условной инструкции if() имеет следую- щий вид:

if(условие){инструкции}

В этом случае сначала проверяется на истинность условие, указанное в скобках после ключевого слова if. Если условие истинно, выполняется следующий по- сле условия if блок инструкций. Если условие ложно, указанные инструкции не выполняются.

На практике нередко используются вложенные инструкции if(). С точки зрения синтаксиса языка Java такая ситуация проста: в ветви else условной инструкции указывается другая условная инструкции и т. д. Синтаксическая конструкция имеет вид:

if(условие_1){инструкции_1}

else if(условие_2){инструкции_2} else if(условие_3){инструкции_3}

...

else if(условие_N){инструкции_N} elase{инструкции}

Последовательность выполнения такого блока вложенных условных инструк- ций такова. Сначала проверяется условие_1. Если оно истинно, выполняются инструкции_1. Если условие_1 ложно, проверяется условие_2. При истинном усло- вии выполняются инструкции_2. В противном случае проверяется условие_3 и т. д. Если и последнее условие_N окажется ложным, будет выполнен блок инструкций инструкции финальной ветви else.

Для читателей, программирующих в C++, отдельно обращаем внимание на то обстоятельство, что условие, которое указывается для проверки в условной ин- струкции if(), должно быть выражением, возвращающим логическое значение (тип boolean). Здесь кроется принципиальное отличие от языка С++, в котором в качестве условия в аналогичной инструкции if() может указываться число. В языке Java автоматического приведения числовых значений к логическому типу нет! Это же замечание относится и к прочим управляющим инструкциям в Java.

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

Листинг 2.1. Использование условной инструкции if()

class UsingIf{

public static void main(String[] args){

int x=3,y=6,z;

Условная инструкция if() 51

// Условная инструкция: if(x!=0){

z=y/x;

System.out.println("Значение z="+z);} else System.out.println("Деление на нуль!");

}

}

В программе объявляются три целочисленные переменные x, y и z. Первым двум переменным сразу при объявлении присваиваются значения. В условной инструкции переменная x проверяется на предмет отличия ее значения от нуля (условие x!=0). Если значение переменной не равно нулю, переменной z при- сваивается результат деления значения переменной y на значение переменной x. После этого выводится сообщение с указанием значения переменой z.

Если проверяемое условие ложно (то есть значение переменной x равно нулю), выводится сообщение "Деление на нуль!". Для приведенных в листинге 2.1 зна- чений переменных в результате выполнения программы появится сообщение Значение z=2.

Еще один пример использования условной инструкции if() в упрощенной фор- ме приведен в листинге 2.2.

Листинг 2.2. Использование упрощенной формы инструкции if()

class UsingIf2{

public static void main(String[] args){

int x=3,y=6,z;

// Условная инструкция: if(x!=0){

z=y/x;

System.out.println("Значение z="+z);

// Завершение программы: return;}

System.out.println("Деление на нуль!");

}

}

Функциональность программного кода, по сравнению с предыдущим примером, не изменилась. Однако механизм использования условной инструкции несколь- ко изменился. Главное отличие состоит в том, что теперь отсутствует ветвь else условной инструкции.

Как и ранее, если значение переменной x отлично от нуля, командой z=y/x при- сваивается значение переменной z, после чего выводится сообщение "Значе- ние z=" со значением этой переменной. Следующей командой в блоке условной инструкции является инструкция завершения работы программы return.

Если значение переменной x равно нулю, блок команд условной инструкции не выполняется, а выполняется команда System.out.println("Деление на нуль!"),

размещенная после условной инструкции. Таким образом, сообщение Деление на нуль! появляется только в том случае, если не выполнено условие в условной инструкции.

Для значений переменных, представленных в листинге 2.2, в результате выпол- нения программы на экране появляется сообщение Значение z=2.

Пример использования нескольких вложенных инструкций if() приведен в ли- стинге 2.3.

Листинг 2.3. Использование вложенных инструкций if()

class UsingIf3{

public static void main(String[] args){

int a=0;

// Если a равно 0:

if(a==0){System.out.println("Нулевое значение переменной!");}

// Если a равно 1:

else if(a==1){System.out.println("Единичное значение переменной!");}

// Если a – четное (остаток от деления на 2 равен 0):

else if(a%2==0){System.out.println("Четное значение переменной!");}

// В прочих случаях:

else {System.out.println("Нечетное значение переменной!");} System.out.println("Программа завершила работу!");

}

}

В методе main() объявляется целочисленная переменная a. В зависимости от значения этой переменной на экран выводятся разные сообщения. При нуле- вом значении переменной выводится сообщение Нулевое значение переменной!. Если значение переменной a равняется 1, выводится сообщение Единичное значе- ние переменной!. Сообщение Четное значение переменной! появляется в том случае, если значение переменной a есть число четное. Для проверки четности значения переменной a вычисляется остаток от деления a на 2 (для четного числа остаток равен 0). В прочих случаях программой выводится сообщение Нечетное значение переменной!.

Перебор всех возможных вариантов реализован через блок вложенных услов- ных инструкций. Перечисленные ранее условия проверяются по очереди, до первого выполненного условия. Если ни одно из условий не выполнено, коман- дой System.out.println("Программа завершила работу!") в завершающей ветви else блока вложенных условных инструкций выводится соответствующее сообще- ние.

Хотя с помощью блоков вложенных условных инструкций if() можно реа- лизовать практически любою схему ветвления алгоритма программы, нередко вместо вложенных инструкций if() используется условная инструкция выбора switch().