Найти тему

Крутой курс Java для "чайников". Урок 10. Логические операторы.

Логические операторы, которые будут рассмотрены в статье:

&& - логическое И

|| - логическое ИЛИ

! - логическое НЕ

Указанные операторы работают с операндами типа boolean, то есть имеющими значения true или false, либо с выражениями, результатом выполнения которых являются значения true или false.

Они используются для объединения нескольких простых выражений, каждое из которых возвращает значение типа boolean, в одно сложное выражение, результатом выполнения которого является единственное значение true или false.

Забегая вперёд, стоит отметить, что все эти операторы активно используются при условном ветвлении, когда направление работы программы зависит от значения (true или false), которое примет операнд или сложное выражение.

Итак,

Оператор && Логическое И

Для понимания работы оператора && объявим 5 переменных логического типа и присвоим четырем из них значения:

boolean a = true;

boolean b = false;

boolean c = true;

boolean d = false;

boolean result;

Теперь если переменной result присвоить значение

result = a && c;

то она примет значение true, поскольку значение каждого из операндов равно true. То есть "правда" И "правда".

Если переменной result присвоить значение

result = a && b;

то она примет значение false, поскольку "правда" И "ложь" - это "ложь".

Если переменной result присвоить значение

result = b && d;

то она примет значение false, поскольку "ложь" И "ложь" - это "ложь".

Таким образом, в нашем примере результатом выполнения оператора && будет значение true, если значение обоих операндов будет равно true. В противном случае результатом будет false.

Но чаще в качестве операндов всех операторов, рассматриваемых в текущем уроке используются не переменные, а логические выражения. Например:

(5>1) && (5>2)

Поскольку выражения в скобках в обоих случаях являются правдой, результатом выполнения оператора && будет true.

А результатом выполнения оператора

(5<1) && (5>2)

будет false, поскольку выражение в первых скобках не является правдой.

А если быть ещё точнее, то логические выражения, которые используются в качестве операторов обычно состоят не только из значений (например, числовых), а из переменных и значений. Например, если объявить переменные:

int a=0;

int b = 10;

и составить из них логическое выражение

(a<5) && (b>5)

то результатом выполнения оператора && будет true.

Стоит отметить что при составлении сложных выражений, в которых число простых логических выражений более двух, обязательным условием равенства результата выполнения этого оператора true является истина всех простых выражений. Например, результатом выполнения оператора && в следующем выражении:

(a<5) && (b>5) && (b>a)

будет true, поскольку все выражения в скобках верны. А если хотя бы одно из них ложное, например

(a<5) && (b>5) && (a==b)

то результатом будет false.

Оператор || - логическое ИЛИ

Для понимания работы оператора ИЛИ возьмём те же переменные и их значения

boolean result;

int a = 0;

int b = 10;

Теперь переменной result присвоим значение выражения

result = (a>0) || (a<0) || (a == b);

В данном случае выражение в первых скобках - false, во вторых скобках - false, в третьих скобках - тоже false. Соответственно переменной result будет присвоено значение false.

А если поменять выражение, например в первых скобках

result = (a==0) || (a<0) || (a == b);

Теперь выражение в первых скобках истинно, т.е. его значение равно true. Теперь переменной result будет присвоено значение true.

Таким образом, при использовании оператора || ИЛИ если хотя бы одно из простых выражений, составляющих сложное выражение, принимает значение true, то и всё сложное выражение также принимает значение true.

Оператор ! - логическое НЕ

Оператор ! - логическое НЕ используется с одним операндом. Он возвращает противоположное значение типа boolean от того значения, которое имел операнд. Например, если переменная a имела значение true, то !a возвратит значение false.

Если объявить всё те же переменные

boolean result;

int a = 0;

int b = 10;

и присвоить переменной result значение, например

result = (a <= b);

очевидно, что его значением будет true.

Если поменять выражение следующим образом

result = !(a <= b);

то значение переменной result станет false. Значение выражения в скобках истинно, т.е. true, оператор ! меняет его на противоположное false.

А если поменять выражение на такое

result = !(a >= b);

то значение переменной result станет true. Выражение в скобках ложно, т.е. false, оператор ! меняет его значение на противоположное, т.е. true.

Ну и напоследок, сейчас мы имеем значение true в переменной result. Командой

result = !result;

мы меняем его на противоположное. После выполнения данной команды его значение станет false.

Если ещё раз выполнить такую команду

result = !result;

то значение опять поменяется на противоположное true.

Ну и теперь немного практики.

Создадим новый класс с именем Logic

class Logic

{

}

Внутри фигурных скобок класса Logic объявим главный метод main

public static void main (String[] args)

{

}

Внутри фигурных скобок метода main объявим несколько переменных и присвоим части из них начальные значения:

boolean result;

boolean yes = true;

boolean no = false;

int a = 0;

int b = 10;

Теперь для наглядности выведем на экран значения тех переменных, которым присвоены начальные значения:

System.out.println("Значение переменной yes " + yes);

System.out.println("Значение переменной no " + no);

System.out.println("Значение переменной a " + a);

System.out.println("Значение переменной b " + b);

Продемонстрируем работу оператора && И с различными типами данных. Сделаем вывод пустой строки и заголовок.

System.out.println(" ");

System.out.println("Демонстрация работы оператора && И с различными типами данных");

System.out.println("Работа оператора && И с данными типа boolean");

System.out.println("Результат выражения yes && yes - " + (yes && yes) );

System.out.println("Результат выражения yes && no - " + (yes && no) );

System.out.println("Результат выражения no && no - " + (no && no) );

System.out.println("Работа оператора && И с выражениями");

System.out.println("Результат выражения (5>1) && (5>2) - " + ((5>1) && (5>2)) );

System.out.println("Результат выражения (5>1) && (a>b) && (5>2) - " + ((5>1) && (a>b) && (5>2)) );

Теперь продемонстрируем работу оператора || ИЛИ.

System.out.println(" ");

System.out.println("Демонстрация работы оператора || ИЛИ");

System.out.println("Результат выражения (a==0) || (a<0) || (a == b) - " + ((a==0) || (a<0) || (a == b)) );

System.out.println("Результат выражения (a!=0) || (a<0) || (a == b) - " + ((a!=0) || (a<0) || (a == b)) );

Ну и наконец демонстрация работы оператора ! НЕ.

System.out.println(" ");

System.out.println("Демонстрация работы оператора ! НЕ");

Присвоим переменной result начальное значение

result = yes;

System.out.println("Начальное значение переменной result - " + result);

result = !result;

System.out.println("Измененное значение переменной result - " + result);

А можно сделать так

result = !(a==b);

System.out.println("Ещё раз измененное значение переменной result - " + result);

Теперь как обычно сохраняем программу под именем Logic.java

Затем cкомпилируем и запустим программу

-2

Выводы:

  • Операторы &&, ||, ! работают с операндами типа boolean, то есть имеющими значения true или false, либо с выражениями, результатом выполнения которых являются значения true или false;
  • Результатом выполнения любого из операторов &&, ||, ! является логическое значение true или false;
  • Результатом выполнения оператора && является true, когда все его операнды имеют значение true. Если значение хотя бы одного из них false, то результатом выполнения оператора && будет также false;
  • Результатом выполнения оператора || является true, если хотя бы один из его операндов имеет значение true;
  • Оператор ! используется с одним операндом. Он возвращает противоположное значение типа boolean от того значения, которое имел операнд.

Ссылка на предыдущий урок

Ссылка на следующий урок

Ссылка на содержание курса