Одним из фундаментальных элементов многих языков программирования являются условные конструкции. Данные конструкции позволяют направить работу программы по одному из путей в зависимости от определенных условий.
В языке Java используются следующие условные конструкции: if..else
и switch..case
Конструкция if/else
Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
1 2 3 4 5 |
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); } |
После ключевого слова if
ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.
Так как, в данном случае первое число больше второго, то выражение num1 > num2
истинно и возвращает значение true
. Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а конкретно метод System.out.println("Первое число больше второго");
. Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок else
:
1 2 3 4 5 6 7 |
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); } else{ System.out.println("Первое число меньше второго"); |
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны. С помощью выражения else if
, мы можем обрабатывать дополнительные условия:
1 2 3 4 5 6 7 8 9 10 11 |
int num1 = 6; int num2 = 8; if(num1>num2){ System.out.println("Первое число больше второго"); } else if(num1<num2){ System.out.println("Первое число меньше второго"); } else{ System.out.println("Числа равны"); } |
Также мы можем соединить сразу несколько условий, используя логические операторы:
1 2 3 4 5 |
int num1 = 8; int num2 = 6; if(num1 > num2 && num1>7){ System.out.println("Первое число больше второго и больше 7"); } |
Здесь блок if будет выполняться, если num1 > num2
равно true
и одновременно num1>7
равно true
.
Конструкция switch
Конструкция switch/case аналогична конструкции if/else
, так как позволяет обработать сразу несколько условий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
int num = 8; switch(num){ case 1: System.out.println("число равно 1"); break; case 8: System.out.println("число равно 8"); num++; break; case 9: System.out.println("число равно 9"); break; default: System.out.println("число не равно 1, 8, 9"); } |
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после оператора сase. И если совпадение будет найдено, то будет выполняться определенный блок сase.
В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Например, если бы убрали бы оператор break
в следующем случае:
1 2 3 4 5 6 |
case 8: System.out.println("число равно 8"); num++; case 9: System.out.println("число равно 9"); break; |
то так как у нас переменная num равно 8, то выполнился бы блок case 8
, но так как в этом блоке переменная num увеличивается на единицу, оператор break отсутствует, то начал бы выполняться блок case 9
.
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default, как в примере выше. Хотя блок defaultнеобязателен.
Начиная с JDK 7 в выражении switch..case кроме примитивных типов можно также использовать строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package firstapp; import java.util.Scanner; public class FirstApp { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Введите Y или N: "); String input= in.nextLine(); switch(input){ case "Y": System.out.println("Вы нажали букву Y"); break; case "N": System.out.println("Вы нажали букву N"); break; default: System.out.println("Вы нажали неизвестную букву"); } } } |
Тернарная операция
Тернарную операция имеет следующий синтаксис: [первый операнд - условие] ? [второй операнд] : [третий операнд]
. Таким образом, в этой операции участвуют сразу три операнда. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true
, то возвращается второй операнд; если условие равно false
, то третий. Например:
1 2 3 4 |
int x=3; int y=2; int z = x<y? (x+y) : (x-y); System.out.println(z); |
Здесь результатом тернарной операции является переменная z. Сначала проверяется условие x<y
. И если оно соблюдается, то z будет равно второму операнду — (x+y), иначе z будет равно третьему операнду.