Java if, else & switch conditional control statements Tutorial
In this Java tutorial we learn to control the flow of our application through the if, else if, else and switch statements.
We also learn how to nest conditional statements inside one another, and use the shorthand method of writing an if statement with the ternary operator.
What is conditional control
We can control the flow of our application by evaluating certain conditions. Based on the result of the evaluation, we can then execute certain sections of code.
As an example, let’s consider an application with a member area. To gain access to the member area, a user must provide the correct login credentials.
If the user provides the correct credentials, they are allowed to enter the member area. If not, they are given the option to try again or reset their password.
In pseudocode, the example above would look something like this.
if username == db_username && password == db_password redirect to member area otherwise if forgot_password reset password otherwise try_again
The actual code will not look like the example above, but it serves to give you an example of what conditional control is used for.
We can use conditional control in Java through the following statements, in combination with comparison and logical operators.
The if statement in Java
The if statement will evaluate in its header if a condition is true or not.
If the condition proves true, the compiler will execute the code in the if statement’s code block. If the condition proves false, the compiler will move on to the next statement outside and below the code block.
An if statement is written with the keyword if , followed by the condition(s) we want to evaluate between parentheses.
Then, we specify a code block with open and close curly braces that will be executed if the condition proves true.
Note that an if statement itself is not terminated with a semicolon.
Java if then else case
Одним из фундаментальных элементов многих языков программирования являются условные конструкции . Данные конструкции позволяют направить работу программы по одному из путей в зависимости от определенных условий.
В языке Java используются следующие условные конструкции: if..else и switch..case
Конструкция if/else
Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
int num1 = 6; int num2 = 4; if(num1>num2)
После ключевого слова if ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.
Так как, в данном случае первое число больше второго, то выражение num1 > num2 истинно и возвращает значение true . Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а конкретно метод System.out.println(«Первое число больше второго»); . Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок else :
int num1 = 6; int num2 = 4; if(num1>num2) < System.out.println("Первое число больше второго"); >else
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны. С помощью выражения else if , мы можем обрабатывать дополнительные условия:
int num1 = 6; int num2 = 8; if(num1>num2) < System.out.println("Первое число больше второго"); >else if(num1
Также мы можем соединить сразу несколько условий, используя логические операторы:
int num1 = 8; int num2 = 6; if(num1 > num2 && num1>7)
Здесь блок if будет выполняться, если num1 > num2 равно true и одновременно num1>7 равно true .
Конструкция switch
Конструкция switch/case аналогична конструкции if/else , так как позволяет обработать сразу несколько условий:
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase . И если совпадение найдено, то будет выполняет соответствующий блок сase .
В конце блока сase ставится оператор break , чтобы избежать выполнения других блоков. Например, если бы убрали оператор break в следующем случае:
case 8: System.out.println("число равно 8"); num++; case 9: System.out.println("число равно 9"); break;
то выполнился бы блок case 8 , (поскольку переменная num равна 8). Но так как в этом блоке оператор break отсутствует, то начал бы выполняться блок case 9 .
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default , как в примере выше. Хотя блок default необязателен.
Также мы можем определить одно действие сразу для нескольких блоков case подряд:
int num = 3; int output = 0; switch(num) < case 1: output = 3; break; case 2: case 3: case 4: output = 6; break; case 5: output = 12; break; default: output = 24; >System.out.println(output);
Тернарная операция
Тернарную операция имеет следующий синтаксис: [первый операнд — условие] ? [второй операнд] : [третий операнд] . Таким образом, в этой операции участвуют сразу три операнда. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true , то возвращается второй операнд; если условие равно false , то третий. Например:
Ветвление в Java
В данной статье мы рассмотрим такое понятие как ветвление в компьютерных программах в общем и написанных на ЯП Java. Поговорим о таких управляющих конструкциях, как:
- if-then (или же if )
- if-then-else (или же if-else )
- switch-case
Ветвление
if-then
Оператор if-then , или же просто if пожалуй самый распространенный оператор. Выражение “да там 1 if написать” уже стало крылатым. Оператор if имеет следующую конструкцию:
- bool_condition — boolean выражение, результатом которого является true или false. Данное выражение называют условием.
- statement — команда (может быть не одна), которую необходимо исполнить, в случае, если условие истинно ( bool_statement==true )
public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a < 10) < System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству"); >>
В данной программе пользователю предлагается ввести количество процентов заряда батареи на его смартфоне. В случае, если осталось менее 10 процентов заряда, программа предупредит пользователя о необходимости зарядить смартфон. Это пример простейшей конструкции if . Стоит заметить, что если переменная `а` будет больше либо равна 10, то ничего не произойдет. Программа продолжит выполнять код, который следует за конструкцией if . Также заметим, что в данном случае, у конструкции if есть только одна последовательность действий для исполнения: напечатать текст, либо не делать ничего. Эта вариация ветвления с одной “ветвью”. Такое порой бывает необходимо. Например когда мы хотим обезопасить себя от неправильных значений. К примеру, мы не можем узнать количество букв в строке, если строка равна null . Примеры ниже:
public static void main(String[] args) < String x = null; printStringSize(x); printStringSize("Не представляю своей жизни без ветвлений. "); printStringSize(null); printStringSize("Ифы это так захватывающе!"); >static void printStringSize(String string) < if (string != null) < System.out.println("Кол-во символов в строке `" + string + "` lang-java line-numbers"> if (bool_condition) < statement1 >else
- bool_statement — boolean выражение, результатом которого является true или false. Данное выражение называют условием.
- statement1 — команда (может быть не одна), которую необходимо выполнить, если условие истинно ( bool_statement==true )
- statement2 — команда (может быть не одна), которую необходимо выполнить, если условие ложно ( bool_statement==false )
Если (bool_condition), то Иначе
public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a < 10) < System.out.println("Осталось менее 10 процентов, подключите ваш смартфон к зарядному устройству"); >else < System.out.println("Заряда вашей батареи достаточно для того, чтобы прочитать статью на Javarush"); >>
Тот же пример об уровне заряда батареи на смартфоне. Только если в прошлый раз программа только лишь предупреждала о необходимости зарядить смартфон, то в этот раз у нас появляется дополнительное уведомление. Разберем этот if :
Если a < 10 истинно (уровень заряда батареи меньше 10), программа выведет на печать один текст. Иначе, если условие a < 10 не выполняется, то программа выведет уже совсем другой текст. Доработаем также и второй наш пример, в котором мы выводили на экран количество букв в строке. В прошлый раз программа не выводила ничего, если переданная строка была равна null . Исправим этом, превратив обычный if в if-else :
public static void main(String[] args) < String x = null; printStringSize(x); printStringSize("Не представляю своей жизни без ветвлений. "); printStringSize(null); printStringSize("Ифы это так захватывающе!"); >static void printStringSize(String string) < if (string != null) < System.out.println("Кол-во символов в строке `" + string + "`=" + string.length()); >else < System.out.println("Ошибка! Переданная строка равна null!"); >>
В методе printStringSize в конструкцию if мы добавили блок else . Теперь, если мы запустим программу, она выведет в консоль уже не 2 строки, а 4, хотя вводные (метод main ) остались такими же, как и в прошлый раз. Текст, который выведет программа:
Ошибка! Переданная строка равна null! Кол-во символов в строке `Не представляю своей жизни без ветвлений. `=43 Ошибка! Переданная строка равна null! Кол-во символов в строке `Ифы это так захватывающе!`=25
Допустимы ситуации, когда после else следуют не команды на исполнение, а еще один if . Тогда конструкция принимает следующий вид:
If (bool_condition1) < statement1 >else if (bool_condition2) < statement2 >else if (bool_conditionN) < statementN >else
- bool_condition1
- bool_condition2
- bool_conditionN
- statement1
- statement2
- statementN
Если (bool_condition1) то Иначе если (bool_condition2) то Иначе если (bool_conditionN) то Иначе
Последняя строка в данном случае опциональна. Можно обойтись и без последнего одинокого else . И тогда конструкция примет следующий вид:
If (bool_condition1) < statement1 >else if (bool_condition2) < statement2 >else if (bool_conditionN)
Если (bool_condition1) то Иначе если (bool_condition2) то Иначе если (bool_conditionN) то
Соответственно, в случае, если ни одно из условий не окажется истинным, то ни одна команда не будет исполнена. Перейдем к примерам. Вернемся к ситуации с уровнем заряда на смартфоне. Напишем программу, которая будет более детально информировать владельца об уровне заряда его девайса:
public static void main(String[] args) < String alert5 = "Я скоро отключусь, но помни меня бодрым"; String alert10 = "Я так скучаю по напряжению в моих жилах"; String alert20 = "Пора вспоминать, где лежит зарядка"; String alert30 = "Псс, пришло время экономить"; String alert50 = "Хм, больше половины израсходовали"; String alert75 = "Всё в порядке, заряда больше половины"; String alert100 = "Я готов к приключениям, если что.."; String illegalValue = "Такс, кто-то ввел некорректное значение"; Scanner scanner = new Scanner(System.in); System.out.print("Сколько процентов заряда батареи осталось на вашем смартфоне?"); int a = scanner.nextInt(); if (a 100) < System.out.println(illegalValue); >else if (a < 5) < System.out.println(alert5); >else if (a < 10) < System.out.println(alert10); >else if (a < 20) < System.out.println(alert20); >else if (a < 30) < System.out.println(alert30); >else if (a < 50) < System.out.println(alert50); >else if (a < 75) < System.out.println(alert75); >else if (a >
К примеру в данном случае, если пользователь введет 15, то программа выведет на экран: “Пора вспоминать, где лежит зарядка”. Несмотря на то, что 15 меньше и 30 и 50 и 75 и 100, вывод на экран будет только 1. Напишем еще одно приложение, которое будет печатать в консоль, какой сегодня день недели:
public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); if (dayOfWeek == DayOfWeek.SUNDAY) < System.out.println("Сегодня воскресенье"); >else if (dayOfWeek == DayOfWeek.MONDAY) < System.out.println("Сегодня понедельник"); >else if (dayOfWeek == DayOfWeek.TUESDAY) < System.out.println("Сегодня вторник"); >else if (dayOfWeek == DayOfWeek.WEDNESDAY) < System.out.println("Сегодня среда"); >else if (dayOfWeek == DayOfWeek.THURSDAY) < System.out.println("Сегодня четверг"); >else if (dayOfWeek == DayOfWeek.FRIDAY) < System.out.println("Сегодня пятница"); >else if (dayOfWeek == DayOfWeek.SATURDAY) < System.out.println("Сегодня суббота"); >>
Удобно конечно, но в глазах немного рябит от обилия однообразного текста. В ситуациях, когда у нас имеются большое количество вариантов лучше использовать оператор, речь о котором пойдет ниже.
switch-case
Альтернативой жирным if с большим количеством ветвей служит оператор switch-case . Данный оператор как бы говорит “Так, у нас есть вот такая вот переменная. Смотрите, в случае, если её значение равно `x`, то делаем то-то и то-то, если ее значение равно `y`, то делаем по-другому, а если ничему не равно из вышеперечисленного, просто делаем вот так… ” Данный оператор обладает следующей структурой.
- byte and Byte
- short and Short
- int and Integer
- char and Character
- enum
- String
Стоит обратить внимание: между `case valueX:` и `case valueY:` нет оператора break . Здесь, если argument будет равен value1 , выполнится statement1 . А если argument будет равен valueX либо valueY , выполнится statementXY . Разбавим тяжелую для восприятия теорию на легкую для восприятия практику. Перепишем пример с днями недели с использованием оператора switch-case .
public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); switch (dayOfWeek) < case SUNDAY: System.out.println("Сегодня воскресенье"); break; case MONDAY: System.out.println("Сегодня понедельник"); break; case TUESDAY: System.out.println("Сегодня вторник"); break; case WEDNESDAY: System.out.println("Сегодня среда"); break; case THURSDAY: System.out.println("Сегодня четверг"); break; case FRIDAY: System.out.println("Сегодня пятница"); break; case SATURDAY: System.out.println("Сегодня суббота"); break; >>
Теперь напишем программу, которая выводит информацию о том, является ли сегодняшний день будним днем или выходным, используя оператор switch-case .
public static void main(String[] args) < // Определим текущий день недели DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); switch (dayOfWeek) < case SUNDAY: case SATURDAY: System.out.println("Сегодня выходной"); break; case FRIDAY: System.out.println("Завтра выходной"); break; default: System.out.println("Сегодня рабочий день"); break; >>
Немного поясним. В данной программе мы получаем enum DayOfWeek , который обозначает текущий день недели. Далее мы смотрим, равняется ли значение нашей переменной dayOfWeek значениям SUNDAY либо SATURDAY . В случае, если это так, программа выводит “Сегодня выходной”. Если же нет, то мы проверяем, равняется ли значение переменной dayOfWeek значению FRIDAY . В случае, если это так, программа выводит “Завтра выходной”. Если же и в этом случае нет, то вариантов у нас немного, любой оставшийся день является будним днем, поэтому по умолчанию, если сегодня НЕ пятница, НЕ суббота и НЕ воскресение программа выведет “Сегодня рабочий день”.