Урок 7. Булевы и условные операторы Java


На седьмом уроке из серии уроков по основам Java мы будем обсуждать булевы и условные операторы в Java.

Логические значения

Логическое значение – это примитивный тип данных, который хранит одно из двух значений, true или false. Название происходит от изобретателя, Джорджа Буля, который очень подробно обсуждал идею булева уравнения. В Java мы можем использовать булевы выражения для создания условий и выполнения блоков кода, основанных на этих условиях. Чтобы проиллюстрировать эту идею, представьте себе ситуацию, которую большинство из нас испытывает каждый день. Когда ваш будильник зазвенит утром, то, легли ли вы спать рано или поздно, вы можете решить, вставать или нажимать кнопку повтора. Если вы рано легли спать, это можно считать логическим значением, но для того, чтобы код решил, какое из этих двух действий вы должны выполнить, вам нужны условные операторы.

Условные инструкции

Условные операторы определяют условия, которые являются истинными или ложными, а затем выполняются в зависимости от того, является ли условие истинным. В основном, условия говорят:”Если x истинно, то выполните y". Эта логика называется "если-утверждение".

Во всех языках программирования это if-оператор является самым мощным и важным оператором, поскольку он позволяет программе каждый раз выполняться по-разному. Для демонстрации, если мы создадим логический isMonday и логический isRaining и установим их оба в true, у нас может быть оператор if, который проверяет это, а затем вызывает drinkBeer(), если оба они истинны. В конце концов, что еще можно сделать в дождливый понедельник?

@Test
public void demonstrateBoolean() {
     boolean isMonday = true;
     boolean isRaining = true;

     if(isMonday && isRaining) {
          drinkBeer();
     }	
}
Проверка истинности обоих условий выполняется с помощью символа “&&". Если оба условия верны, то метод drinkBeer() будет выполняться. Мы также можем проверить, верно ли только одно из условий:

@Test
public void demonstrateBoolean() {
     boolean isMonday = false;
     boolean isRaining = true;

     if(isMonday || isRaining) {
          drinkBeer();
     }	
}
Оператор if в примере выше говорит: “Если сегодня понедельник или идет дождь, то пейте пиво". Оператор || - это оператор OR. Теперь, если идет дождь или это понедельник, метод drinkBeer() будет выполнен.

Короткое замыкание

Одним из интересных аспектов сложных if-утверждений является идея короткого замыкания. Как мы уже обсуждали ранее, в операторе AND, если оба условия верны, будет выполняться метод drinkBeer(). Однако, если первое условие ложно, оператор if будет "замыкать цепь" и не будет выполнять код без проверки второго логического значения. Если бы логическое число isMonday было истинным, а логическое число isRaining - ложным, вы бы с волнением отметили, что сегодня понедельник, но поскольку дождя не было, вы все равно не могли бы пить пиво.

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

Сложные выражения

Наши "если-утверждения" также могут быть значительно усложнены путем усложнения различных условий. Логика работает, оценивая условия в нескольких уровнях скобок, а затем оценивая условия только в одном наборе скобок. Логика также проверяет условия слева направо. Прежде чем продолжить чтение, посмотрите, сможете ли вы выяснить, будет ли метод drinkBeer() выполняться в примере ниже.

@Test
public void demonstrateBoolean() {
     boolean isMonday = false;
     boolean isRaining = true;
     boolean isTuesday = true;
     boolean isSunny = false;

     if((isMonday && isRaining) || (isTuesday && isSunny)) {
          drinkBeer();
     }	
}
Хорошо, давайте посмотрим на первое условие, "isMonday & & isRaining" – это false. После этого вы можете видеть, что у нас есть оператор OR между двумя наборами условий, поэтому оператор if должен проверить второе условие. Итак, давайте сделаем так: "isTuesday & & isSunny". Это тоже ложь, потому что сегодня вторник, но не солнечно. Поскольку ни одно из условий не истинно, все утверждение ложно, и мы не можем пить пиво.

До тех пор, пока вы полностью не поймете “булеву алгебру” и не освоите использование условных выражений, продолжайте использовать скобки для обеспечения необходимого вам порядка выполнения. Короче говоря, условность интерпретируется следующим образом:
  1. Любые условные обозначения внутри скобок
  2. Любые AND символы
  3. Любые символы OR
Если вы не чувствуете себя очень комфортно с условиями, вы должны заключить их в скобки, просто чтобы быть в безопасности.

Утверждение Else

Теперь я познакомлю вас с аналогом “if-утверждения”: “else statement”. Скажем, сегодня не понедельник, так что мы не можем пить пиво, но нам все равно нужно пить жидкость. Мы могли бы сказать: "если сегодня понедельник, пейте пиво; в противном случае пейте молоко.”

@Test
public void demonstrateBoolean() {
     boolean isMonday= false;

     if(isMonday) {
          drinkBeer();
     } else {
          drinkMilk();
     }		
}
Вы можете заметить, что оператор else не имеет условия. Это происходит потому, что else выполняется во всех случаях, когда случай if не применяется.

Else-If

На твоем месте мне бы надоело пить молоко шесть дней в неделю. Но в то же время я не хочу пить пиво чаще одного раза в неделю. Именно здесь вступает в действие последнее условное утверждение: утверждение else-if. Еще если проверяет условие, если если-утверждение ложно. Вы также можете иметь несколько "else if", которые выполняются, если все предыдущие операторы ложны. В конце всех этих утверждений вы можете получить ваше утверждение “else", которое все еще выполняется во всех других случаях, что означает, что все остальные утверждения были ложными. Давайте рассмотрим пример, где по пятницам мы пьем воду:

@Test
public void demonstrateBoolean() {
     boolean isMonday= false;
     boolean isFriday= true;

     if(isMonday) {
          drinkBeer();
     }
     else if(isFriday) {
          drinkWater();
     }
     else {
          drinkMilk();
     }		
}
Использование условных выражений с другими примитивными типами данных

Мы не только можем использовать условные операторы, чтобы проверить, является ли булева переменная истинной или ложной, но мы также можем создать булеву с помощью условия и оценить ее. Например, мы могли бы иметь два int, i и j со значениями 4 и 3 соответственно. Мы можем сравнить их, используя следующие символы:

>	больше
<	меньше
>= Больше или равно
<= Меньше или равно
==	Равный
!=	не равный
Вы можете заметить, что оператор для сравнения - это оператор двойное равно, а не одинарное. Это происходит потому, что ‘=’ уже имеет применение: он используется для присвоения значений примитивным типам данных и для присвоения объектов ссылочным переменным. Поэтому, чтобы избежать путаницы как для программиста, так и для компилятора, = = используется для сравнения равенства.

'!=' означает "не равный". Вообще "!" перед любым булевым значением будет отрицаться его значение. Из этого следует, что мы будем читать: "!true" как "не true" , что эквивалентно false. Мы читаем !false как "не false", следовательно, она будет эквивалентна true.

Если вы посмотрите на приведенный ниже пример, то увидите, что условные обозначения можно использовать для сравнения значений по-разному. Очевидно, поскольку мы знаем значения, присвоенные i и j, это не очень полезно, но если бы эти значения были динамически заданы в качестве параметра метода, то эти условные обозначения были бы полезны.

@Test
public void demonstrateBoolean() {
     int i = 4;
     int j = 3;
     boolean areEqual = (i == j);
     if(i > j) {
          // i больше чем j
     }else if( !(i  >=  j)) {
          // i не больше или равно j
     }else {
          // i равно  j
     }

     if(areEqual) {
          // i равно j
     }else {
          // i не равно j
     }
}
Применение условных операторов

Возможно, у вас еще нет навыков создания более сложных условных операторов, но вы все еще можете применять условные выражения к некоторым полезным примерам. Допустим, у нас есть наши значения i и j, но теперь мы хотим увеличить значение j, Если это понедельник. Мы не будем увеличиваться в каждом случае; мы делаем это только в том случае, если наше условие выполнено. Мы можем делать и другие вещи, которые могут быть полезны при определенных условиях.

@Test
public void demonstrateBoolean() {
     int i = 4;
     int j = 3;
     boolean isMonday = true;
     boolean areEqual = (i == j);
     if(areEqual){
          i = 8
     }
     else if(j > i){
          j = i - 3;
     }

     if(isMonday){
          j++;
     }
}
Условные выражения предоставляют Java-коду средства, позволяющие реагировать по-разному в зависимости от различных внешних условий. Это чрезвычайно гибкие и мощные инструменты, которые вы будете продолжать использовать по мере того, как будете изучать все больше и больше Java.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, уроки по java, java, условные операторы




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Excel и автопреобразование в дату
Помощь со скриптом на php, или необычные проблемы в обычном месте
JavaScript фреймворки