- Логические операторы
- Таблица логических операторов в Java
- Таблица. Результаты выполнения логических операторов
- Сокращённые логические операторы
- Оператор if
- Вложенные операторы if
- Цепочка операторов if-else-if
- Тернарный оператор
- Android Studio
- Логические операторы
- 1. Логические операторы OR, AND, XOR, NOT.
- 2. Укороченные логические операторы (short-circuit).
- 3. Операции ==, !=.
- 4. Операции с присваиванием.
Логические операторы
Логические операторы работают только с операндами типа boolean. Все логические операторы с двумя операндами объединяют два логических значения, образуя результирующее логическое значения. Не путайте с побитовыми логическими операторами.
Таблица логических операторов в Java
Оператор | Описание |
---|---|
& | Логическое AND (И) |
&& | Сокращённое AND |
| | Логическое OR (ИЛИ) |
|| | Сокращённое OR |
^ | Логическое XOR (исключающее OR (ИЛИ)) |
! | Логическое унарное NOT (НЕ) |
&= | AND с присваиванием |
|= | OR с присваиванием |
^= | XOR с присваиванием |
== | Равно |
!= | Не равно |
?: | Тернарный (троичный) условный оператор |
Логические операторы &, |, ^ действуют применительно к значениям типа boolean точно так же, как и по отношению к битам целочисленных значений. Логический оператор ! инвертирует (меняет на противоположный) булево состояние: !true == false и !false == true.
Таблица. Результаты выполнения логических операторов
A | B | A | B | A & B | A ^ B | !A |
---|---|---|---|---|---|
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
Сокращённые логические операторы
Кроме стандартных операторов AND (&) и OR (|) существуют сокращённые операторы && и ||.
Если взглянуть на таблицу, то видно, что результат выполнения оператора OR равен true, когда значение операнда A равно true, независимо от значения операнда B. Аналогично, результат выполнения оператора AND равен false, когда значение операнда A равно false, независимо от значения операнда B. Получается, что нам не нужно вычислять значение второго операнда, если результат можно определить уже по первому операнду. Это становится удобным в тех случаях, когда значение правого операнда зависит от значения левого.
Рассмотрим следующий пример. Допустим, мы ввели правило — кормить или не кормить кота в зависимости от числа пойманных мышек в неделю. Причём число мышек зависит от веса кота. Чем больше кот, тем больше он должен поймать мышей.
Если запустить программу, то пример будет работать без проблем — пять мышей в неделю вполне достаточно, чтобы побаловать кота вкусным завтраком. Если он поймает четырёх мышей, то начнутся проблемы с питанием кота, но не с программой — она будет работать, просто не будет выводить сообщение о разрешении покормить дармоеда.
Теперь возьмём крайний случай. Кот обленился и не поймал ни одной мышки. Значение переменной mouse будет равно 0, а в выражении есть оператор деления. А делить на 0 нельзя и наша программа закроется с ошибкой. Казалось бы, мы предусмотрели вариант с 0, но Java вычисляет оба выражения mouse != 0 и weight / mouse Реклама
Источник
Оператор if
Условный оператор if часто применяется программистами и имеется во всех языках программирования. Оператор if позволяет вашей программе в зависимости от условий выполнить оператор или группу операторов, основываясь на значении булевой переменной или выражения. Оператор if является основным оператором выбора в Java и позволяет выборочно изменять ход выполнения программы — и это одно из основных отличий между программированием и простым вычислением.
Оператор if начинается с ключевого слова if. Ключевое слово if должно сопровождаться булевым выражением, заключённым в скобки. Самая простая форма выглядит так:
Здесь условие — это булево выражение, имеющее значение true или false. Если условие истинно, то оператор или группа операторов выполняется, если ложно, то оператор не выполняется. Очень часто булево выражение в операторе if содержит какое-нибудь сравнение, но можно использовать булеву переменную или константу
Оператор if продолжается заключенным в фигурные скобки фрагментом, который называют блоком операторов. Если используется только один оператор, то фигурные скобки можно опустить. Но практика показывает, что лучше их всегда использовать, особенно в сложных проектах, когда постоянно приходится что-то переделывать.
Напишем следующий пример:
Как вы думаете, что появится на экране? Правильно, ничего, так как оператор не будет выполняться, потому что условие 2 * 2 == 5 является ложным.
Обратите внимание, что оператор равенства состоит из двух символов знака равно. Об этом часто забывают начинающие программисты.
Вот список операторов, которые можно использовать в условных выражениях (не ставьте пробел между двумя символами и соблюдайте их очерёдность):
Оператор | Описание |
---|---|
Больше чем | |
>= | Больше или равно |
== | Равно |
!= | Не равно |
Результат сравнения удобно использовать для изменения логики программы. Например, если кот голоден, то накормить его. Или если число нечётное, то сделать его чётным.
Существует расширенный вариант оператора if с использованием ключевого слова else:
В этом случае при выполнении условия оператора if инициируется только один оператор, если условие не выполняется, то также инициируется только один оператор, который относится к else. Также можно использовать блоки операторов, тогда синтаксис будет выглядеть так:
Обе части оператора if и else не могут выполняться одновременно. А условное выражение, управляющее оператором if должно возвращать булево значение.
Возьмём пример из жизни. Выйдем на Манежную площадь, где собрались люди, поддерживающие Путина. У митингующих можно встретить плакат:
Попробуем перевести его на язык Java:
Запустите программу и пробуйте завести любые фамилии политиков, а затем щелкайте на кнопке. Вы увидите, что при вводе любой фамилии кроме Putin, президентом будет кот.
Вложенные операторы if
Вложенный оператор if используется для дальнейшей проверки данных после того, как условие предыдущего оператора if принимает значение true. Иными словами, вложенный оператор применяется в тех случаях, когда для выполнения действия требуется соблюдение сразу нескольких условий, которые не могут быть указаны в одном условном выражении. Необходимо помнить, что во вложенных операторах if-else вторая часть else всегда относится к ближайшему оператору if, за условным выражением которого следует оператор ; или блок операторов. Вот небольшой пример:
Цепочка операторов if-else-if
Часто используется цепочка операторов if-else-if — конструкция, состоящая из вложенных операторов if:
Условные выражения оцениваются сверху вниз. Как только найдено условие, принимающее значение true, выполняется ассоциированный с этим условием оператор, а остальная часть цепочки пропускается. Если ни одно из условий не принимает значение true, то выполняется последний оператор else, который можно рассматривать как оператор по умолчанию. Если же последний оператор else отсутствует, а все условные выражения принимают значение false, то программа не выполняет никаких действий.
Напишем пример, вычисляющий время года, когда коты поют свои мартовские песни.
Порядок условий имеет значение: если мы расположим условия if и else if в неправильном порядке, то может случится, что ни одна из ветвей else if не выполнится никогда.
Ещё про котов (котов не бывает много). В зависимости от имени кота получаем его описание.
Гулять так гулять. Усложняем условия.
Тернарный оператор
Продвинутые программисты часто используют тернарный оператор ? : вместо if-else. Тернарный оператор использует три операнда и записывается в форме:
Знак вопроса является переходом к блокам. Как видим, после вопросительного знака идут два блока. Если в условии получаем True, то используем первый блок. Если в условии у нас получается False, то используем второй блок.
Например, нужно вычислить, какое из двух чисел больше и занести результат в третью переменную:
При тернарном варианте код будет следующим:
Сравниваем два заданных числа. Так как 9 меньше 27, то берём выражение из первого блока, т.е. highNum.
Нельзя сказать, что такой код слишком читаем, поэтому можно не использовать в своей практике.
Android Studio
Если вы используете if, то делайте это следующим образом. Сначала напишите само булево выражение для проверки, например, (5 + 4 > 2), потом ставьте точку и студия предложит вам вариант с if — соглашаемся и получаем готовое выражение с фигурными скобками. Экономьте своё время.
Источник
Логические операторы
Логические операторы языка Java выполняются только с операндами типа boolean .
Следующая таблица перечисляет логические операторы языка Java:
Операция | Описание |
& | Логическая операция И (AND) или конъюнкция |
| | Логическая операция ИЛИ (OR) или дизъюнкция |
^ | Логическая операция исключающее ИЛИ (XOR) |
! | Логическая унарная операция НЕ (NOT) |
|| | Укороченная логическая операция ИЛИ (short-circuit) |
&& | Укороченная логическая операция И (short-circuit) |
== | Равенство |
!= | Неравенство |
&= | Логическая операция И с присваиванием |
|= | Логическая операция ИЛИ с присваиванием |
^= | Логическая операция исключающее ИЛИ с присваиванием |
1. Логические операторы OR, AND, XOR, NOT.
Начнем с операций OR(|), AND(&), XOR(^), NOT(!). Операторы OR, AND, XOR являются бинарными — они требуют два оператора. NOT — это унарный оператор, только один оператор участвует в операции. Результаты выполнения этих логических операций представлены в следующей таблице:
A | B | A|B | A&B | A^B | !A |
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
OR (|) — результат будет true , если хотя бы одно значение равно true . Пример: для того, чтобы забрать ребенка из садика, должна прийти либо мать, либо отец, либо оба — в любом случае результат будет положительный. Если же никто не придет, ребенка не заберут — результат будет отрицательный.
AND (&) — результат будет true , только если и A, и B равны true . Пример: для того чтобы свадьба состоялась, и невеста (A) и жених (B) должны явиться на бракосочетание, иначе оно не состоится.
XOR (^) — результат будет true , только если или A равно true , или В равно true . Пример: у двух друзей на двоих один велосипед, поездка на велосипеде состоится только если один из них поедет на нем. Вдвоем они ехать не могут.
NOT (!) — инвертирование значения. Если значение было true, то станет false , и наоборот.
Рассмотрим пример использования логических операторов:
2. Укороченные логические операторы (short-circuit).
Чаще всего в языке Java используются так называемые укороченные логические операторы (short-circuit):
Правый операнд сокращенных операций вычисляется только в том случае, если от него зависит результат операции, то есть если левый операнд конъюнкции имеет значение true , или левый операнд дизъюнкции имеет значение false .
В формальной спецификации языка Java укороченные логические операции называются условными.
В следующем примере правый операнд логического выражения вычисляться не будет, так как условие d!=0 не выполняется и нет смысла дальше вычислять это выражение:
Если же логическое выражение переписать как d != 0 & num / d > 10 , то правое выражение вычисляться будет. И в этом случае программа выбросит исключение времени выполнения с сообщением — на ноль делить нельзя.
Если нам надо сравнить возможный диапазон значений для какой-то переменной, например — a такое условие разбивается на два: a :
3. Операции ==, !=.
Здесь все просто — чтобы сравнить два значения типа boolean , можно использовать знаки == (проверка на равенство) и != (проверка на неравенство):
4. Операции с присваиванием.
Также существуют операции с присваиванием для AND, OR, XOR. Посмотрим пример:
Источник