Для того, чтобы изменить последовательность выполнения фрагментов программы, в языке Java применяются конструкции if, if-else и switch.
В этом уроке мы рассмотрим:
Как применяются условные операторы if, if-else и switch. Какие существуют Логические операторы в Java. В чем отличие между оператором == и методом equals при сравнении. Какие возможны сокращения для конструкции if-else. В конце урока предложены упражнения для закрепления материала.
Конструкция if-else имеет следующий вид:
if (логическое_выражение) {
//блок кода 1
}
else{
//блок кода 1
}
Блок else не является обязательным.
Логическое выражение это выражение (или переменная), возвращающее значение типа boolean.
boolean b = true;
if (b) {
System.out.println("b - истина");
}
В логическом выражении могут использоваться следующие логические операторы: ==, !=,<=,>=,>,<, &&,||,! .
Рассмотрим на примере:
int a = 4;
int b = 5;
boolean result;
result = a == b // a равно b - false
result = a != b // a не равно b - true
result = a < b; // a меньше b - true
result = a > b; // a больше b - false
result = a <= 4 // a меньше или равно 4 - true
result = b >= 6 // b больше или равно 6 - false
result = a > b || a < b // (a больше b) логическое или (a меньше b) - true
result = 3 < a && a < 6 // (3 меньше a) логическое и(a меньше 6) - true
result = !result // логическое нет - false
Оператор == работает иначе на объектных типах данных, нежели на примитивных. Когда мы используем объекты и хотим проверить их равенство, то оператор == укажет нам лишь на то, являются ли объекты одними и теми же или нет. Если же необходимо проверить логическое равенство объектов, то следует использовать метод equals. Пример
Если логическое выражение в скобках правдиво, то выполняется , блок кода в фигурных скобках {} после if. Если логическое выражение принимает значение false, то ничего не происходит.
if (a == b) {
//Если a равно b - выводим сообщение
System.out.println("a и b равны!");
}
Конструкция if-else отличается от предыдущей тем, что если логическое выражение в круглых скобках принимает значение false, то выполняется блок кода, находящийся в фигурных скобках после ключевого слова else
if (a == b) {
//Если a равно b - выводим сообщение
System.out.println("a и b равны!");
}
else{
//Если a не равно b - выводим сообщение
System.out.println("a и b не равны!");
}
if (a == b)
System.out.println("a и b равны!");
else
System.out.println("a и b не равны!");
System.out.println(a==b ? "a и b равны!" : "a и b не равны!");
Общая форма записи условия выглядит следующим образом:
Логическое_выражение ? Выражение1 : Выражение2
Если Логическое_выражение принимает значение true, то выполняется Выражение1, а иначе — Выражение2. Внимание: при использовании этой конструкции два последних выражения должны иметь один и тот же тип.
Условный оператор switch — case удобен в тех случаях, когда количество вариантов очень много и писать для каждого if-else очень долго. Конструкция имеет следующий вид :
switch (выражение) {
case значение1:
//блок кода 1;
break;
case значение2:
//блок кода 2;
break;
...
case значениеN:
//блок кода N;
break;
default:
блок N+1;
}
switch работает с такими примитивными типами данных как: byte, short, char, и int. Также с типами Enum, классом String и несколькими специальными классами-оболочками примитивных типов: Character, Byte, Short, Integer.
Выражение в круглых скобках после switch сравнивается со значениями, указанными после слова case, и, в случае совпадения, управление передается соответствующему блоку кода. Если выражение не совпадает ни с одним вариантом case, то управление передается блоку default, который не является обязательным. После выполнения соответствующего блока, оператор break вызывает завершение выполнения оператора switch. Если break отсутствует, то управление передается следующему блоку за только что выполненным.
В следующем примере, для целочисленного значения, представляющего день недели, определяется его название в виде строки. Для значения 3, переменная dayString примет значение «Среда».
int day = 3;
String dayString;
switch (day) {
case 1: dayString = "Понедельник";
break;
case 2: dayString = "Вторник";
break;
case 3: dayString = "Среда";
break;
case 4: dayString = "Четверг";
break;
case 5: dayString = "Пятница";
break;
case 6: dayString = "Суббота";
break;
case 7: dayString = "Воскресенье";
break;
default: dayString = "Ошибка";
break;
}
System.out.print(dayString);