- •Вступление. О книге и не только
- •Объектно-ориентированное программирование и Java
- •Часть I. Введение в Java Глава 1. Основы Java
- •Простые программы
- •Комментарии
- •Простые типы данных и литералы
- •Приведение типов
- •Основные операторы Java
- •Глава 2. Управляющие инструкции Java
- •Условная инструкция if()
- •Условная инструкция switch()
- •Инструкция цикла for()
- •Инструкция цикла while()
- •Инструкция do-while()
- •Метки и инструкции break() и continue()
Глава 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().
