Операторы сравнения и логические операторы. Ветвление в программе. Условный оператор.

Логические операторы

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

Операторы:

У логических операторов следующий приоритет: отрицание, конъюнкция, дизъюнкция.

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

Примеры:

boolean a = true;
boolean b;
b = a || true; // b истинно
b = !b; // b ложно
System.out.println(b); // выведет false
a = a || b; // a истинно
boolean c;
c = a && (a||b); //с истинно
System.out.println(c); // выведет true

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

Операторы сравнения

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

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

Примеры:

boolean m;
m = 5 >= 4; // истина
m = 5 != 5 || false; // ложь
boolean w;
w = m == false; // истина
System.out.println(w); // выведет true

Очень важно не путать оператор эквивалентности с операцией присваивания.

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

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

Оператор if обеспечивает выполнение или пропуск инструкции в зависимости от указанного логического условия. Если условие истинно, то инструкция выполняется.

if (условие) инструкция;

На месте инструкции может быть как обычная инструкция (одна команда), так и составная инструкция (блок содержащий несколько команд, в том числе, другие условные операторы).

Примеры (если в качестве значений переменных будет указан нуль, то деление не будет производиться и его результат не станет выводиться на экран):

// Пример 1
int a = 25;        
if (a != 0) System.out.println( 100/a );
// Пример 2
int b = 25;  
if (b != 0) {
  System.out.println( 100/b );
}

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

У оператора if существует формат с дополнительной частью else:

if (условие) 
инструкция1;
else 
инструкция2;

В случае истинности условия выполняется простая или составная инструкция1, а в случае ложности простая или составная инструкция2.

Пример:

int a = 0; 
if (a != 0) System.out.println( 100/a );
else System.out.println("На нуль делить нельзя");

Задачи

  1. Создать программу, проверяющую и сообщающую на экран, является ли целое число записанное в переменную n, чётным либо нечётным.

  2. Создать программу, выводящую на экран ближайшее к 10 из двух чисел, записанных в переменные m и n. Например, среди чисел 8,5 и 11,45 ближайшее к десяти 11,45.

  3. В три переменные a, b и c записаны три вещественных числа. Создать программу, которая будет находить и выводить на экран вещественные корни квадратного уравнения ax²+bx+c=0, либо сообщать, что корней нет.

    Теория для тех, кто не учил математику в школе: http://ru.wikipedia.org/wiki/Квадратное_уравнение