Иногда нужно выполнять различные действия в зависимости от полученной информации. Разделение хода выполнения программы на варианты называется ветвлением. В самом простом виде оператор ветвления выглядит так:
if (условие) {
// здесь описываются действия
}
Если условие истинно, действия выполняются. Если же ложно, они игнорируются.
Простой пример
public static void main(String[] args) {
check(4);
check(-1);
}
public static void check(int n) {
if (n < 0) {
System.out.println("Число " + n +
" отрицательно.");
}
}
Вывод:
Число -1 отрицательно.
Пример с двумя вариантами
public static void main(String[] args) {
check(4);
check(-1);
}
public static void check(int n) {
if (n >= 0) { // больше или равно нулю
System.out.println("Число " + n +
" неотрицательно.");
} else {
System.out.println("Число " + n +
" отрицательно.");
}
}
Вывод:
Число 4 неотрицательно. Число -1 отрицательно.
Пример с тремя вариантами
Можно проверять несколько условий с помощью оператора else if.
public static void main(String[] args) {
check(4);
check(-1);
check(0);
}
public static void check(int n) {
if (n < 0) {
System.out.println("Число " + n +
" отрицательно.");
} else if (n == 0) {
// сравнение обозначается двойным «равно»,
// чтобы не путать с присваиванием
System.out.println("Число " + n +
" — ноль.");
} else {
System.out.println("Число " + n +
" положительно.");
}
}
Вывод:
Число 4 положительно. Число -1 отрицательно. Число 0 — ноль.
Больше вариантов
Блоков else if может быть неограниченное количество. Пример:
public static void main(String[] args) {
say(0);
say(1);
say(2);
say(3);
}
public static void say(int n) {
if (n == 0) {
System.out.println("ноль");
} else if (n == 1) {
System.out.println("один");
} else if (n == 2) {
System.out.println("два");
} else {
System.out.println(n);
}
}
Вывод:
ноль один два 3
Логический тип boolean
Логическое выражение принимает значение true или false (выражение либо истинно, либо ложно). Например, n == 0, как и любое другое сравнение, — логическое выражение.
boolean nIsZero = n == 0;
if (nIsZero) {
//...
эквивалентно
if (n == 0) {
//...
Разные булевы выражения можно комбинировать с помощью операций «и» и «или».
Выражение «a или b» истинно, если a или b истинно, и записывается как a || b. Выражение будет ложно, только если и a, и b ложны.
Выражание «a и b» истинно, только если a истинно и b истинно, и записывается как a && b. Выражение будет ложно, если а или b ложно.
if (a == 0 || a == 3) {
// код будет выполнен, если a равно нулю или трём
}
if (a == 0 && b == 3) {
// код будет выполнен, если a равно нулю и b равно трём
}
Для булевых выражений действует принцип ускоренного вычисления. Например, в коде
int a = 0;
if (a == 0 || a == 3) {
…
выражение a == 0 истинно, а значение выражения a == 3 не будет вычислено за ненадобностью, т. к. уже известно, что всё выражение истинно.
Аналогично, в коде
int a = 8;
if (a == 0 && b == 3) {
…
выражение a == 0 ложно, поэтому значение выражения b == 3 вычислено не будет.