Что такое boolean в java
Перейти к содержимому

Что такое boolean в java

  • автор:

Тип данных boolean и логические операторы — введение в Java 005 #

Boolean в Java — это логический тип данных. Переменная типа boolean может принимать всего два значения — это правда или ложь — true & false. Эти два значения обозначаются в других языках и часто выдаются на экран как 1 и 0, но всё же не равны этим значениям: например, выражение boolean b = 0; приведёт к ошибке при компиляции программы. Но мы можем сравнить переменные или выполнить логическую операцию с типом данных boolean:

 int a = 1, b = 2; boolean bool = a  

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

Таблица истинности #

a b a & b a I b a ^ b ! a
false false false false false true
false true false true true true
true false false true true false
true true true true false false

Давайте представим себе пример из жизни: мы ищем на сайте все статьи, которые мы опубликовали и комментировали. Должны быть два совпадения — это вариант a & b. Или мы ищем все статьи, в которых есть упоминание слов “алгебра” или “математика” — это a | b. А отыскать все статьи, которые написаны не нами, можно, применив логический оператор !a. Стать исключительно космонавтом или медиком — это a ^ b

Это так называемые булевы или логические операции. В интернете много материала по ключевым словам: таблица истинности, булева алгебра, теория множеств, конъюнкция, дизъюнкция.

С помощью таблицы с результатами логических операций можно перепроверить работу Java:

public class NewBoolean   public static void main(String[] args)   boolean a, b, c;  a = true;  b = false;  c = a & b;  System.out.println(c); // returns false because only one of the two required values​is true   int d = 1, f = 2;  boolean bool = d  f;   int i = 10;  int j = 9;  System.out.println(i > j); // returns true, because 10 is higher than 9   System.out.println(10 == 15); // returns false, because 10 is not equal to 15   int x = 10;  System.out.println(x == 10); // returns true, because the value of x is equal to 10  > > 

Надо понимать, что значение вашего чекбокса (галочки) на сайте Facebook при регистрации — “с правилами ознакомлен и согласен” — и есть значение булевой переменной в программе.

Логические операторы, которые поддерживаются Java #

Логический операторы Значение
== Проверка на соответствие (допустим, что a равен b)
!= Не равно (если a не равно b, то)
! Отрицание, логическое не
& Логическое И, and
| Логическое или, or
^ Исключительное или, XOR
&& Укороченный &
|| Укороченный или

Амперсанд — это название знака &.
Карет (англ. caret) — это название знака ^.
Пайп (pipeline), Вертикальная черта — это название знака |.

Мы ещё раз рассмотрим данные операторы позже. Пока мы должны понимать, что с арифметическими операторами всё немного сложнее, чем хотелось бы.

Булева алгебра #

Булева алгебра, ударение на первый слог. БУлева.

Принципиально основы булевой алгебры не должны были давать в школе. Программисты учат её в институте.

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

Дизъюнкция #

Когда мама ИЛИ папа дают мне деньги на карманные расходы, то я бегу и покупаю себе мороженное.

Знакомая ситуация, деньги можно получить в трёх случах из четырёх. В одном случае же деньги может дать и мама, и папа, тогда и друга можно угостить мороженным.

Дизъюнкция - логическое сложение, логическое ИЛИ, включающее или, просто “или”(англ. OR; нем. ODER) В Java операторы "|" и "||"

boolean a = false, b = true, c; c = a | b; 

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

В учебниках можно встретить обозначение “больше либо равно единице” - =>1.

Конъюнкция #

Конъюнкция - логическое “И”, логическое умножение, просто “И”, “AND”, "&".

В Java оператор "&" и "&&".

boolean a = false, b = true, c; c = a & b; 

Если светит солнце “И” у меня выходной, то я иду купаться на озеро.

Пример из жизни. Ядерный чемоданчик могут активировать только два офицера одновременно. По отдельности чемодан остаётся неактивным.

Антиваленц #

“XOR”, эксклюзивное или, “EOR”, “EXOR”. В Java оператор "^".

boolean a = false, b = true, c; c = a ^ b; 

Только на горных лыжах в Австрии или на лошадях у бабушки в деревне я забываю про свою работу.

Или ты садишься за математику или я расскажу всё отцу.

ИЛИ - ИЛИ. Исключительное или.

Лампочка в больнице может работать от городского электричества или от дизельного генератора в подвале. Но не от двух источников одновременно.

В учебниках можно встретить обозначение “равно единице” - =1.

Отрицание #

Negation. NOT. В Java оператор "!".

boolean a = false, b; b = !a; 

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

Дополнительные материалы #

  1. Булева алгебра — самое важное
  2. Булева алгебра
  3. Теория множеств
  4. Очень неплохая статья
  5. simulator — симулятор логических выражений в электротехнике. Очень помог мне в своё время вспомнить булеву алгебру.

Домашнее задание #

  1. Что выдаст программа, если запросить значения a, b, c, d, e, f?
  2. Посчитайте сначала в уме и проговорите вслух, что делает каждая строчка.
boolean a = (7+8)*5 > 7+8*5; boolean b = (7+8)*4 != 7+4*5; boolean c = 3+4 > 9+1 & 16-5 > 3*4; boolean d = 16/2 < 6+2 | 4+5  
 System.out.println(a + "\n" + b + "\n" + c + "\n" + d + "\n" + e); 
  1. Петя: “Я не ел. Маша тоже не ела.”
  2. Вася: “Маша действительно не ела. Это сделал Петя”
  3. Маша: “Вася врет. Это он съел.”

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

Условный оператор Boolean в Java

Логический оператор boolean имеет одно из двух значений: true или false (истина или ложь), да или нет, 1 или 0. В этом уроке мы рассмотрим на практике этот оператор, а также протестируем на отрицание нашу переменную.

boolean java

В Java этот тип переменной для логических значений записывается так:

boolean user = true; 

Таким образом, вместо того, чтобы вводить int или double или string, вы просто вводите логическое значение (первая строчная буква "b"). После имени вашей переменной вы можете присвоить значение true или false . Обратите внимание, что оператор присваивания представляет собой один знак равенства (=). Если вы хотите проверить, имеет ли переменная значение, вам нужно использовать два знака равенства (==). Запустите этот простой код:

boolean user = true; if(user == true)  System.out.println("Это истина"); > else  System.out.println("Это ложь"); > 

Таким образом, первый оператор if проверяет, имеет ли переменная user значение true. Часть else проверяет, является ли она ложной. Вам не нужно говорить «else if (user == false)». В итоге, если что-то не так, то это ложь. Так что вы можете просто использовать что-то другое – в Java существует только два варианта логических значений boolean. Кроме это для boolean в Java подходит следующий оператор сравнения - это ! (означает «не»). Посмотрите на следующий код:

boolean user = true; if(!user)  System.out.println("Это ложь"); > else  System.out.println("Это истина"); > 

Этот код почти такой же, как и предыдущий, за исключением этой строки:

if(!user)  

На этот раз у нас есть оператор НЕ перед переменной user. Оператор НЕ - это один восклицательный знак (!), идущий перед переменной, которую вы хотите проверить. Это тестирование на отрицание, которое означает, что Java-программа тестирует противоположность того, что на самом деле является значением. Поскольку переменная user установлена ​​в true, тогда !user будет проверять наличие ложных значений. Если для user установлено значение false, то !user будет проверять истинные значения. Подумайте об этом так: если что-то НЕ верно, то что это? Или если это не ложь, то что? Урок о Boolean в Java короткий, так как достаточно простой. В следующей части мы рассмотрим операторы Java Switch.

Java: Логический тип

Кроме арифметических операций, из школьной математики нам известны еще и операции сравнения, например:

5 > 4 

Это звучит как вопрос: «Пять больше четырех?». В данном случае, ответ «да». В других случаях, ответом может быть «нет», например, для такого выражения:

Операции сравнения не имеют привязки к числам. Сравнивать можно практически что угодно — например, строки. Когда мы входим на какой-то сайт, внутри происходит сравнение введенного логина и пароля с теми, какие есть в базе. Если совпадение есть, то происходит авторизация.

Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие – операторы равенства и неравенства.

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

Список операций сравнения в Java:

Посмотрим на пару примеров логических операций:

5 > 4 password == text 

Оба примера — это выражения. Результат вычисления этих выражений — это одно из двух специальных значений

  • true — «истина»
  • false — «ложь»

Это новый для нас тип данных — boolean. Он содержит всего лишь два этих значения. Так выглядит пример кода с ним:

var result = 5 > 4; System.out.println(result); // => true 

Попробуем написать метод, который принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:

// Метод, возвращающий boolean, называется предикатом // Обычно такие методы имеют префикс has, can, is, was и так далее public static boolean isInfant(int age)

Пользуемся тем фактом, что любая операция — это выражение. Поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1 ».

В зависимости от пришедшего параметра, сравнение будет либо истинным ( true ), либо ложным ( false ). В итоге return вернет этот результат:

System.out.println(App.isInfant(3)); // => false System.out.println(App.isInfant(0)); // => true 

Задание

Реализуйте метод isPensioner() , который принимает один параметр — возраст человека, и проверяет, является ли он пенсионным. Пенсионером считается человек, достигший возраста 60 лет и больше.

App.isPensioner(75); // true App.isPensioner(18); // false 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Определения

  • Логический тип (boolean) — тип данных с двумя возможными значениями: true (истина) и false (ложь).

Тип данных boolean

Как бы вы сравнили два значения, на предмет, является ли радиус больше чем 0, равен 0 или меньше чем 0? Java представляет шесть реляционных операторов (также известных как операторы сравнения), показанных в таблице:

Оператор Java Математический символ Имя Пример (radius равен 5) Результат
меньше чем radius < 5 false
меньше чем или равно radius

false
> > больше чем radius > 5 true
>= больше чем или равно radius >= 5 true
== = равно radius == 5 false
!= не равно radius != 5 true

Предупреждение: оператор проверки равенства представляет собой два знака равно (==), а не один знак равенства (=). Последний символ используется для присваивания.

Результат сравнения – это булева величина: true или false. Например, следующая инструкция отобразит true:

double radius = 1; System.out.println(radius > 0);

Булевы переменные

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

boolean lightsOn = true;

true и false являются литералами, т.е. используются буквально, как есть, в точности как цифра, такая как 10. Они обрабатываются как зарезервированные слова и не могут использоваться как идентификаторы в программе.

Предположим, вы хотите написать программу для практики в начальном сложении. Программа генерирует два случайных односимвольных числа number1 и number2 и отображает студенту вопрос вроде «Сколько будет 8+5?», примерно так:

После того, как студент вводит ответ, программа показывает сообщение, свидетельствующее о верности или ошибочности ответа.

Имеется несколько способов сгенерировать случайные числа. На данный момент сгенерируйте первое число используя System.currentTimeMillis() % 10, а второе число используя System.currentTimeMillis() / 7 % 10.

import java.util.Scanner; public class AdditionQuiz < public static void main(String[] args) < int number1 = (int) (System.currentTimeMillis() % 10); int number2 = (int) (System.currentTimeMillis() / 7 % 10); // Создать Scanner Scanner input = new Scanner(System.in); System.out.print( "Сколько будет " + number1 + " + " + number2 + "? "); int answer = input.nextInt(); System.out.println( number1 + " + " + number2 + " = " + answer + " это " + (number1 + number2 == answer)); >>

Строки 5-6 генерируют два числа, number1 и number2. Строка 14 получает ответ от пользователя. Ответ проверяется в троке 18 используя булевое выражение number1 + number2 == answer. Слово true означает «истина», «верно», слово false означает «ложь», «неверно».

Проверь себя:

  1. Перечислите шесть релятивистских операторов.
  2. Предположим, что x равен 1, покажите результат следующих булевых выражений:
(x > 0) (x < 0) (x != 0) (x >= 0) (x != 1)
  1. Могут ли допускаться следующие преобразования, связанные с явным преобразованием типов? Напишите тестовую программу для подтверждения вашего ответа.
boolean b = true; i = (int)b;
int i = 1; boolean b = (boolean)i;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *