Skip to main content

8. Истина/Ложь

Теория

Помимо чисел в переменных можно хранить и другую информацию. В данном блоке мы рассмотрим логический тип данных boolean.

В таких переменных может храниться только два значения: истина(true) и ложь(false)

    boolean a = true;
boolean b = false;
System.out.println(a + " " + b);

На консоль будет выведено:

true false

В java так же, как для численных переменных, определено преобразование к строке, поэтому вывод таких переменных можно организовать через складывание переменных с пробелом в кавычках ...+" "+....

Логические переменные можно чистать с консоли:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean a = scanner.nextBoolean();

boolean b = !a; // отрицание истинности b

System.out.println(b);
}
}

Если мы введём true, то получим false, если false, то получим true.

! - означает отрицание.

Помимо явного указания значения(true/false), можно использовать логические выражения. Общи вид логического выражения:

boolean d = a *ло* b;

где ло - логический оператор. Логические операторы:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean a = scanner.nextBoolean();
boolean b = scanner.nextBoolean();

boolean c1 = a & b; // логическое и
boolean c2 = a | b; // логическое или
boolean c3 = a && b; // укороченное логическое и
boolean c4 = a || b; // укороченное логическое или

boolean c1 = a ^ b; // исключающее или
}
}

Логическая операция И истинна тогда и только тогда, когда истинны оба её аргумента, а логическая операция ИЛИ - если истинен хотя бы один из её аргументов.

Исключающее ИЛИ равно истине тогда и только тогда, когда истинен ровно один из аргументов.

Укороченное логическое «и» работает следующим образом: сначала проверяется первый аргумент, если он равен false, то результат логического «и» в любом случае будет равен false. Поэтому при первом аргументе, равным false, укороченное «и» не проверяет второй аргумент, а выдаёт сразу результат false.

По схожей логике работает укороченное логическое «или». Только наоборот: при первом аргументе, равном true, второй аргумент не проверяется и автоматически возвращает true.

Условия могут более сложными, например:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean a = scanner.nextBoolean();
boolean b = scanner.nextBoolean();
boolean c = scanner.nextBoolean();
boolean d = scanner.nextBoolean();

boolean r = (a || b) && c || d;
}
}

Логические операции группируются так же, как и арифметические.

Есть несколько базовых операций для составления условных выражений:

  • a > ba больше b
  • a < ba меньше b
  • a >= ba меньше или равно b
  • a <= ba меньше или равно b
  • a == ba равно b

Рассмотрим задачу: с клавиатуры вводится число a, требуется вывести true, если а < 5 и false в остальных случаях.

Т.к. boolean имеет встроенное преобразование к строке, то удобно просто положить значение выражения в переменную этого типа, а потом вывести эту переменную на экран.

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
boolean b = a < 5;
System.out.println(b);
}
}
Обратите внимание

Операция проверки на равенство == и операции присваивания = возвращают логические значения. В случае условия результат будет типа boolean, а в случае присваивания – значение, равное значению переменной.

int a = 5;
int c = 7;
boolean b = (a==c); // в b лежит false
int d = (a=c); // в d лежит 7

У логических операторов тоже определён порядок действий. Наивысший приоритет имеют скобки, потом отрицание переменных !a, потом сравнения <, >, <=, >=, потом проверки на равенство/неравенство ==, !=.

Следующими в порядке понимжения приоритета идут одинарные логические И(&), исключающее ИЛИ(^), ИЛИ(|), затем укороченное И(&&), затем укороченное ИЛИ(||).

Задание

Во всех задачах нужно вывести true, если высказывание истинно, и false - если ложно.

  1. Даны два целых числа: AA, BB. Каждое из чисел AA и BB нечетное.
  2. Даны два целых числа: A, B. Хотя бы одно из чисел AA и BB чётное.
  3. Даны два целых числа: A, B. Ровно одно из чисел AA и BB положительное.
  4. Даны три целых числа: AA, BB, CC. Число BB находится между числами AA и CC.
  5. Дано целое положительное число. Данное число является четным двузначным.
  6. Среди трех данных целых чисел есть хотя бы одна пара совпадающих.
  7. Дано трехзначное число. Все цифры данного числа различны.

Ссылка на контест