Главная » Java » Логические операторы

0

Иногда, чтобы  принять решение, необходимо проверить более одного условного  выражения.  Например,  если  название  штата  Техас  (Texas) или  Калифорния (California),  нужно  добавить  налог  штата  к  цене каждого товара в магазине. Это пример  логического или – либо Техас либо  Калифорния. Это работает так – если любое из двух условий истинно (true),  результат всего выражения -­? тоже истина (true).

В Java  знак  логического  или  обозначается  одной  или  двумя вертикальными линиями. В следующем примере я буду использовать переменную типа String. У этого классa в Java есть метод equals() для проверки строк  на  равенство  и  я  буду  использовать  его,  чтобы проверить равна ли  переменная  state  (штат) Техас или  Калифорния:

if (state.equals("Texas") | state.equals("California"))

Можно  также использовать две вертикальные линии в операторе if:

if (state.equals("Texas") || state.equals("California"))

Разница  между  этими  условиями  в  том,  что  если  вы  используете  две вертикальные  линии, и выражение стоящее слева  истинно (true), то правое  –  даже  не  проверяется.  Если  используется  одна  вертикальная черта, JVM всегда  будет вычислять результат обоих выражений.

Логическое  и задаётся одним или двумя амперсандами (&&). Всё выражение  истинно,  если  истинна  каждая  часть  этого  выражения. Например, снимает налог штата, только если этот штат (state)  – Нью-­? Йорк  и  цена  (price)  больше  110  долларов.  Оба  условия  должны  быть истинными одновременно:

if (state.equals("New York") && price >110)

или

if (state.equals("New York") & price >110)

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

Логическое не (negation) обозначается восклицательным знаком. Оно меняет  значение  выражения  на  противоположное.  Например,  если некоторое действие может быть выполнено только, если штат не Нью-­? Йорк, можно  написать так:

if (!state.equals("New York"))

Другой пример –  следующие выражения абсолютно идентичны:

if (price < 50)

if (!(price >=50))

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

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

Существует ещё  один  тип оператора if, который называется условный оператор.  Он   используется   для   того,   чтобы  присвоить   значение переменной,  в зависимости от истинности выражения, стоящего перед вопросительным знаком.  Если  выражение  истинно,  присваивается

значение  стоящее  сразу  после  вопросительного  знака,  в  противном случае  –  значение стоящего после двоеточия:

discount = price > 50? 10:5;

Если цена больше пятидесяти, значение переменной discount (скидка) будет равно десяти, в противном случае -­? пяти. Это просто более короткая форма записи обычного оператора if:

if (price > 50){

discount = 10;

} else {

discount = 5;

}

Использование else if

Также  можно  создавать  составные  операторы if содержащие несколько  else if блоков. Давайте создадим класс ReportCard (табель по русски),  у которого будет метод main(), а так  же метод с одним аргументом, в который передаётся численный результат некого теста. В зависимости от этого числа, метод будет печатать вашу оценку по  буквенной системе  оценок  (A,  B,  C,  D).   Назовём   этот   метод convertGrades().

public class ReportCard {

/**

Mетод convertGrades принимает один целочисленный аргумент

- результат теста и возвращает символ A, B, C or D в зависимости от этого аргумента.

*/

public char convertGrades( int testResult){

char grade;

if (testResult >= 90){

grade = ‘A';

}else if (testResult >= 80 && testResult < 90){

grade = ‘B';

}else if (testResult >= 70 && testResult < 80){

grade = ‘C';

}else {

grade = ‘D';

}

return grade;

}

public static void main(String[] args){ ReportCard rc = new ReportCard();

char yourGrade = rc.convertGrades(88);

System.out.println("Ваша первая оценка " + yourGrade); yourGrade = rc.convertGrades(79); System.out.println("Ваша вторая оценка " + yourGrade);

}

}

Помимо  использования  else if в  этом примере демонстрируется, как  использовать переменные типа char.  Также можно  увидеть, что при помощи оператора  && можно проверить, попадает  ли число  в указанный  диапазон. Нельзя написать "если  testResult между  80 и89",  в  Java нужно писать,  что testResult должен быть больше или равен 80, и (&) в то же время  меньше  89,  вот таким  образом:

testResult >= 80 && testResult < 89

Подумайте,  почему мы здесь не используем оператор ||.Оператор switch и принятие решений

Оператор  switch иногда  используется  как  альтернатива  if. Значение  переменной стоящей после оператора switch вычисляется, и  программа  переходит  только  к  одному  из  case блоков, аргумент которого совпадает с результатом этого вычисления:

public static void main(String[] args){ ReportCard rc = new ReportCard();

char yourGrade = rc.convertGrades(88);

  switch (yourGrade){

case ‘A':

System.out.println("Превосходная  работа!");

break;

case ‘B':

System.out.println("Хорошая работа!");

break;

case ‘C':

System.out.println("Надо подтянуть знания!");

break;

case ‘D':

System.out.println("Будь посерьёзнее!");

break;

}

}

Не забудьте написать ключевое слово break в конце каждого case блока,   чтобы после завершения выполнения его кода, произошёл выход   из оператора switch. Если вы  не напишете break,  то напечатаются все  четыре  строки,  не  смотря  на  то,  что  значение переменной yourGrade  имеет только одно значение.

Раньше       оператор switch         имел ограничение    – переменная,  которая  в него передаётся, должна была  иметь  один  из следующих типов: char int byte short enum

Начиная  с Java 1.7, тип  String так  же может использоваться в операторе switch. Кроме того, благодаря автобоксингу, который появился  в Java  1.5  могут  использоваться  типы  обёртки:  Character, Byte, Short, и Integer.

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии