Освой Java играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Оператор if

Тернарный оператор

Условный оператор if часто применяется программистами и имеется во всех языках программирования. Оператор if позволяет вашей программе в зависимости от условий выполнить оператор или группу операторов, основываясь на значении булевой переменной или выражения. Оператор if является основным оператором выбора в Java и позволяет выборочно изменять ход выполнения программы - и это одно из основных отличий между программированием и простым вычислением.

Оператор if начинается с ключевого слова if. Ключевое слово if должно сопровождаться булевым выражением, заключённым в скобки. Самая простая форма выглядит так:


if (условие) оператор;  // если условие истинно, то выполняется оператор

Здесь условие - это булево выражение, имеющее значение true или false. Если условие истинно, то оператор или группа операторов выполняется, если ложно, то оператор не выполняется. Очень часто булево выражение в операторе if содержит какое-нибудь сравнение, но можно использовать булеву переменную или константу


// Если кот голоден
if (isHungry)

Оператор if продолжается заключенным в фигурные скобки фрагментом, который называют блоком операторов. Если используется только один оператор, то фигурные скобки можно опустить. Но практика показывает, что лучше их всегда использовать, особенно в сложных проектах, когда постоянно приходится что-то переделывать.

Напишем следующий пример:


if (2 * 2 == 5)
{
    mResultEditText.setText("Дважды два равно пяти!);
}

Как вы думаете, что появится на экране? Правильно, ничего, так как оператор не будет выполняться, потому что условие 2 * 2 == 5 является ложным.

Обратите внимание, что оператор равенства состоит из двух символов знака равно. Об этом часто забывают начинающие программисты.

Вот список операторов, которые можно использовать в условных выражениях (не ставьте пробел между двумя символами и соблюдайте их очерёдность):

ОператорОписание
<Меньше чем
<=Меньше или равно
>Больше чем
>=Больше или равно
==Равно
!=Не равно

Результат сравнения удобно использовать для изменения логики программы. Например, если кот голоден, то накормить его. Или если число нечётное, то сделать его чётным.


if(number % 2 != 0)
    ++number;

Существует расширенный вариант оператора if с использованием ключевого слова else:

if (условие) оператор;  // если условие истинно, то выполняется первый оператор
else оператор;          // если условие ложно, то выполняется оператор после else

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

if (условие)
{
    оператор1;
    оператор2;
}
else
{
    оператор1;
    оператор2;
}

Обе части оператора if и else не могут выполняться одновременно. А условное выражение, управляющее оператором if должно возвращать булево значение.

Возьмём пример из жизни. Выйдем на Манежную площадь, где собрались люди, поддерживающие Путина. У митингующих можно встретить плакат:

Если не Путин, то кот

Попробуем перевести его на язык Java:


String who = mResultEditText.getText().toString();

if (!who.equals("Putin"))
	who = "Cat";
else
	who = "Putin";
mResultEditText.setText(who);

Запустите программу и пробуйте завести любые фамилии политиков, а затем щелкайте на кнопке. Вы увидите, что при вводе любой фамилии кроме Putin, президентом будет кот.

Вложенные операторы if

Вложенный оператор if используется для дальнейшей проверки данных после того, как условие предыдущего оператора if принимает значение true. Иными словами, вложенный оператор применяется в тех случаях, когда для выполнения действия требуется соблюдение сразу нескольких условий, которые не могут быть указаны в одном условном выражении. Необходимо помнить, что во вложенных операторах if-else вторая часть else всегда относится к ближайшему оператору if, за условным выражением которого следует оператор ; или блок операторов. Вот небольшой пример:

if(i == 10)
{
    if(j < 20) a = b;
    if(k > 100) c = d;
    else a = c;  // else относится к if(k > 100)
}
else a = d; // else относится к if(i == 10)

Цепочка операторов if-else-if

Часто используется цепочка операторов if-else-if - конструкция, состоящая из вложенных операторов if:

if (condition)
    statement;
else if (condition)
    statement;
else if (condition)
    statement;
.
.
.
else
    statement;

Условные выражения оцениваются сверху вниз. Как только найдено условие, принимающее значение true, выполняется ассоциированный с этим условием оператор, а остальная часть цепочки пропускается. Если ни одно из условий не принимает значение true, то выполняется последний оператор else, который можно рассматривать как оператор по умолчанию. Если же последний оператор else отсутствует, а все условные выражения принимают значение false, то программа не выполняет никаких действий.

Напишем пример, вычисляющий время года, когда коты поют свои мартовские песни.


int month = 3; // март
String season; // время года

if(month == 1 || month == 2 || month == 12)
    season = "Зимушка-зима";
else if (month == 3 || month == 4 || month == 5)
    season = "Весна";
else if (month == 6 || month == 7 || month == 8)
    season = "Лето";
else if (month == 9 || month == 10 || month == 11)	
    season = "Осень";
else
    season = "Вы с какой планеты?";
	
mInfoTextView.setText("Мартовские песни коты поют, когда на дворе " + season);

Порядок условий имеет значение: если мы расположим условия if и else if в неправильном порядке, то может случится, что ни одна из ветвей else if не выполнится никогда.

Ещё про котов (котов не бывает много). В зависимости от имени кота получаем его описание.


String catName = "Рыжик";
if (catName == "Пушок"){
    System.out.println("Ваш котёнок пушистенький");
}
else if (catName == "Рыжик"){
    System.out.println("Ваш котёнок рыженький");
}
else {
    System.out.println("Ваш котёнок ни пушистенький и ни рыженький");
}

Гулять так гулять. Усложняем условия.


String[] cats = {"Пушок", "Рыжик", "Лохматик", "Чудик"};
Random random = new Random();
String catName = cats[random.nextInt(4)];
if (catName.equals("Пушок")) {
    System.out.println("Ваш котёнок пушистенький");
} else if (catName.equals("Рыжик")) {
    System.out.println("Ваш котёнок рыженький");
} else if (catName.equals("Лохматик")) {
    System.out.println("Ваш котёнок лохматенький");
} else if (catName.equals("Чудик")) {
    System.out.println("Ваш котёнок чудной");
} else {
    System.out.println("Ваш котёнок ни пушистенький и ни рыженький и не лохматый и ни чудной");
}

Тернарный оператор

Продвинутые программисты часто используют тернарный оператор ? : вместо if-else. Тернарный оператор использует три операнда и записывается в форме:


логическое_условие ? выражение1 : выражение2
Ternary operator

Знак вопроса является переходом к блокам. Как видим, после вопросительного знака идут два блока. Если в условии получаем True, то используем первый блок. Если в условии у нас получается False, то используем второй блок.

Например, нужно вычислить, какое из двух чисел больше и занести результат в третью переменную:


int largerNum;  
int lowNum = 9;  
int highNum = 27; 

if(lowNum < highNum)  // если первое число меньше второго
{  
    largerNum = highNum;
} else {  // иначе
    largerNum = lowNum;  
}  

При тернарном варианте код будет следующим:


int lowNum = 9;  
int highNum = 27;  
int largerNum = lowNum < highNum ? highNum : lowNum;  

Сравниваем два заданных числа. Так как 9 меньше 27, то берём выражение из первого блока, т.е. highNum.

Нельзя сказать, что такой код слишком читаем, поэтому можно не использовать в своей практике.

Android Studio

Если вы используете if, то делайте это следующим образом. Сначала напишите само булево выражение для проверки, например, (5 + 4 > 2), потом ставьте точку и студия предложит вам вариант с if - соглашаемся и получаем готовое выражение с фигурными скобками. Экономьте своё время.

Угадай число

Задача на использование if.

Реклама