Подавляющее большинство программ написанных на любом языке программирования — это программы не линейные. То есть в зависимости от каких то условий программа может вести себя по-разному. Ну вот самый простой пример. Допустим программа авторизации пользователя. Вы вводите имя пользователя и пароль и если такой аккаунт есть в базе программы, то совершается вход, а если такого аккаунта нет, то вам выдается сообщение об ошибке. Такое ветвление в Java организуется с помощью оператора if.
Без него на самом деле жилось бы очень трудно 🙂
Давайте попробуем разобраться с тем как он устроен и как он работает. В общей форме его можно записать так:
if (условие) { действия если условие истино } else { действия если условие ложно }
То есть мы должны задать какое-то условие, которое может быть представлено в булевом виде (это может быть простая переменная типа boolean, результат выполнения какого-то метода, или сравнения), мы так же должны продумать действия, которые происходят при выполнении нашего условия и при его не выполнении. Ну например мы хотим вывести на экран результат сравнения двух чисел:
int a=1,b=2; if (a>b) { System.out.println("a>b"); } else { System.out.println("a<=b"); }
Такой условный оператор сначала проверит истинно ли выражение в скобках (в нашем случае оно ложно), а затем выполнит один из двух участков кода (в нашем случае тот, который стоит после else).
Также можно использовать не полное условие, то есть пропустить строки с 6 по 9. Тогда если условие истинно, выполнится действие в фигурных скобках, а если нет, то ничего не произойдет и программа будет выполнться дальше.
При этом не стоит забывать, что условия можно вкладывать одно в другое, например так:
int a=1,b=2; if (a>b) { System.out.println("a>b"); } else { if (a==b){ System.out.println("a=b");} else { System.out.println("a<b"); } } }
При этом уровень вложения условий друг в друга не ограничен.
Вообще в фигурных скобках можно писать любое количество строк кода. А если мы хотим написать лишь по одной строчке то наш код можно сократить вот так:
int a=1,b=2; if (a>b) System.out.println("a>b"); else System.out.println("a<=b");
То есть просто выкинуть скобки, группирующие несколько действий.
Но это что касается простого условия, а ведь есть еще так называемый «переключатель» — команда switch. Для чего она нужна? Ну например вам необходимо организовать выбор пользователем из нескольких возможных вариантов. Конечно можно написать много-много условий if и это будет работать, но гораздо удобней использовать switch:
int a; a=(int)(Math.random()*4); switch (a) { case 0: { System.out.print("Значение а = 0"); break; } case 1: { System.out.print("Значение а = 1"); break; } case 2: { System.out.print("Значение а = 2"); break; } default: { System.out.print("Значение а какое-то другое"); } }
Оператор switch проверяет значение переменной а и если оно равно одному из значений перечисленных после case то будет выполняться соответствующий код. Оператор break прерывает выполнение оператора switch. А если не один из вариантов перечисленных в case не подошел (например, если а оказалось равно 3) выполнится код после default (получается как с else для if). Кстати, этот оператор тоже писать не обязательно. Тогда если ни один из вариантов не подошел, то программа просто продолжит выполнение. Точно также не обязательно использовать break, тогда будут выполняться все case до следующего break или до конца блока switch.
Например такой код :
int a; a=1; switch (a) { case 0: { System.out.println("Значение а = 0"); } case 1: { System.out.println("Значение а = 1"); } case 2: { System.out.println("Значение а = 2"); } default: { System.out.println("Значение а какое-то другое"); } }
В результате выполнения выведется
Значение а = 1
Значение а = 2
Значение а какое-то другое
Думаю этого достаточно, чтоб писать интересные программы с условиями и переключателями. Если что-то непонятно, или если я что-то забыл, или вы где-то нашли ошибку, пишите в комменты или на мое мыло david@davidmd.ru.
🙂
спасибо, тут вопросов не возникает
Большое спасибо, все очень понятно и доходчиво объяснено. Легко воспринимаемые примеры.
Да незачто 🙂
Последовательные операторы IF просматривают условия по очереди «сверху вниз».
А как с этим делом у оператора CASE?
Примерно так же. Только если в конце case вы не поставите break, будет просмотрен следующий оператор case
а отсутствие break не является грубым нарушением? 🙂
Ну в принципе это не нарушение, то фича 🙂
int a=1,b=2;
if (a>b)
System.out.println(«a>b»);
else
System.out.println(«a<=b");
по моему так писать не совсем верно и ещё это не то же самое что было написано выше этого примера 🙂 если ошибаюсь,то пожалуйста объясните почему)
в последнем примере с case не будет строки
значение а=2
т.е. будет так
значение а=1
значение а какое-то другое
Ну если вы например будете считывать значение a с клавиатуры, то все нормально 🙂