Условные или реляционные операторы Java
Если вам нужно изменить выполнение программы на основе определенного условия, вы можете использовать операторы «если». Реляционные операторы определяют отношения, которые один операнд имеет к другому. Именно они определяют условие равенства. Java предоставляет шесть реляционных операторов, которые перечислены в таблице ниже.
оператор | Описание | Пример (а = 10, б = 15) | Результат |
---|---|---|---|
== | Оператор равенства | A == B | ложный |
знак равно | Не равно оператору | а! = Ь | правда |
> | Лучше чем | а> Ь | ложный |
Меньше, чем | а | правда | |
> = | Больше или равно | а> = Ь | ложный |
Меньше или равно | а | правда |
Результатом этих операций является логическое значение. Реляционные операторы чаще всего используются в выражениях, которые управляют оператором if и различными операторами цикла. Любой тип в Java, включая целые числа, числа с плавающей точкой, символы и логические значения, можно сравнить с помощью теста на равенство == и теста на неравенство! =. Обратите внимание, что в Java равенство обозначается двумя знаками равенства («==»), а не одним («=»).
В Java простейшим оператором, который вы можете использовать для принятия решения, является оператор if. Его самая простая форма показана здесь:
оператор if (условие); или же оператор if (условие) 1; еще заявление2;
Здесь условие является логическим выражением. Если условие истинно, то оператор выполняется. Если условие ложно, то заявление обойдено. Например, предположим, что вы объявили целочисленную переменную с именем someVariable, и вы хотите напечатать сообщение, когда значение someVariable равно 10. Блок-схема и java-код операции выглядят следующим образом:
У нас могут быть разные варианты операторов if.
Вложенные блоки if:
Вложенный оператор if — это оператор if, который является целью другого оператора if или else. Другими словами, мы можем рассмотреть один или несколько операторов if в одном блоке if для проверки различных условий. Например, у нас есть две переменные, и мы хотим проверить конкретные условия для обеих, мы можем использовать вложенные блоки if.
public class NestedIfDemo < public static void main(String[] args) < int a =10; int b =5; if(a==10)< if(b==5)< System.out.println("Inside Nested Loop"); >> > >
если — иначе если лестница:
Может возникнуть ситуация, когда нам нужно несколько раз проверить значение, чтобы найти точное условие соответствия. Ниже программа объясняет то же самое. Давайте посмотрим, есть ли у нас требование проверить, является ли значение переменной меньше 100, равно 100 или больше 100. Ниже код объясняет ту же логику, используя лестницу if-else-if.
public class IfelseLadderDemo < public static void main(String[] args) < int a =120; if(a< 100)< System.out.println("Variable is less than 100"); >else if(a==100) < System.out.println("Variable is equal to 100"); >else if (a>100) < System.out.println("Variable is greater than 100"); >> >
Давайте рассмотрим пример, чтобы понять выше логические операторы и условные операторы. У нас есть требование напечатать результат в оценке, основанной на оценках, введенных пользователем. Мы принимаем данные от пользователя во время выполнения и оцениваем оценки. Эта программа также проверяет ввод и печатает соответствующее сообщение, если ввод является отрицательным или буквенным.
import java.util.Scanner; public class GradeCalculation < public static void main(String[] args) < int marks=0 ; try< //Scanner class is wrapper class of System.in object Scanner inputDevice = new Scanner(System.in); System.out.print("Please enter your Marks (between 0 to 100) >> "); marks = inputDevice.nextInt(); //Checking input validity and grade based on input value if(marks< 0)< System.out.println("Marks can not be negative: Your entry="+ marks ); >else if(marks==0)< System.out.println("You got Zero Marks: Go to ZOO"); >else if (marks>100)< System.out.println("Marks can not be more than 100: Your entry You need to work hard: You failed this time with marks Your score is not bad, but you need improvement, you got C Grade"); >else if (marks>=50 & marks < 60)< System.out.println("You can improve performance, you got C+ grade"); >else if (marks>=60 & marks < 70)< System.out.println("Good performance with B grade"); >else if (marks>=70 & marks < 80)< System.out.println("You can get better grade with little more efforts, your grade is B+"); >else if (marks>=80 & marks < 90)< System.out.println("Very good performance, your grade is A "); >else if (marks>=90) < System.out.println("One of the best performance, Your grade is A+"); >>catch (Exception e) < //This is to handle non-numeric values System.out.println("Invalid entry for marks:" ); >> >
Выходы на основе пользовательского ввода:
Логические операторы короткого замыкания
Java предоставляет два интересных логических оператора, которых нет во многих других компьютерных языках. Это вторичные версии логических операторов И и ИЛИ, известные как логические операторы короткого замыкания. Два логических оператора короткого замыкания:
Они используются для связывания маленьких логических выражений в более крупные логические выражения. && и || операторы оценивают только логические значения. Чтобы выражение AND (&&) было истинным, оба операнда должны быть истинными. Например, приведенный ниже оператор оценивается как true, так как оба операнда (2 <3) и второй (3 <4) оцениваются как true.
Функция короткого замыкания оператора && названа так, потому что она не тратит свое время на бессмысленные оценки. Короткое замыкание && сначала оценивает левую часть операции (операнд один), и если оно принимает значение false, оператор && не утруждает себя взглядом на правую часть выражения (операнд два), так как оператор && уже знает что полное выражение не может быть правдой.
|| Оператор аналогичен оператору &&, за исключением того, что он оценивается как true, если ЛИБО из операндов имеет значение true. Если первый операнд в операции ИЛИ является истинным, результат будет истинным, поэтому короткое замыкание || не тратит время, глядя на правую часть уравнения. Если первый операнд ложен, короткое замыкание || должен оценить второй операнд, чтобы увидеть, будет ли результат операции ИЛИ истинным или ложным.
public class ShortCircuitOpDemo < public static void main(String[] args) < float number1 = 120.345f; float number2 = 345.21f; float number3 = 234.21f; if(number1 < number2 && number1< number3)< System.out.println("Smallest Number is number1"); >if(number3 >number2 || number3 > number1) < System.out.println("number3 is not smallest"); >> >
Тернарный оператор (или? Оператор или условный оператор)
Условный оператор является троичным оператором (он имеет три операнда) и используется для вычисления логических выражений, во многом как оператор if, за исключением того, что вместо выполнения блока кода, если тест равен true, условный оператор назначит значение переменной , Условный оператор начинается с логической операции, за которой следуют два возможных значения переменной слева от оператора присваивания (=). Первое значение (слева от двоеточия) присваивается, если условный (логический) тест равен true, а второе значение присваивается, если условный тест равен false. В приведенном ниже примере, если переменная a меньше b, тогда значение переменной x будет равно 50, иначе x = 60.
В приведенном ниже примере мы определяем статус на основе пользовательского ввода, если он пройден или не выполнен.
import java.util.Scanner; public class TernaryOpDemo < public static void main(String[] args) < //Checking if marks greater than 35 or not String status; int marks; Scanner inputDevice = new Scanner(System.in); System.out.print("Please enter your Marks (between 0 to 100) >> «); marks = inputDevice.nextInt(); status= marks>=35 ?»You are Passed»:»You are failed»; System.out.println(«Status «contitional» operator image-6″ style=»max-width:100%;display:block;height:auto;border: 2px solid silver;»>
Редактор кода Java:
Java 8 операции
Операции позволяют выполнить арифметические, логические и битовые действия с переменными и литералами. В этой статье я попробую описать каждую операцию с таким уровнем подробностей, с которым его учил я.
Операция присваивания
Операция «=» позволяет присвоить значение переменной:
КОНСТАНТНЫЕ значения до int можно присвоить без приведения типа к переменным меньшего размера (например short в byte ), если значение помещается в эту переменную.
Вы можете присвоить переменной, имеющей больший тип, значение меньшего типа, например переменной типа double можно присвоить значение int , но не наоборот (но можно использовать приведение типа, если очень нужно).
Операция присваивания возвращает значение, которое присвоила, поэтому можно присваивать значение сразу нескольким переменным по цепочке:
Преобразование примитивных типов
Есть два типа преобразования примитивных типов:
Расширяющее преобразование примитивов
Следующие преобразования называются расширяющими преобразованиями примитивов:
- byte -> short , int , long , float , double
- short -> int , long , float , double
- char -> int , long , float , double
- int -> long , float , double
- long -> float , double
- float -> double
Расширяющее преобразование не приводит к потере информации в следующих случаях:
- из целого типа в другой целый тип
- из byte , short , char в тип с плавающей точкой
- из int в double
- из float в double в выражении с strictfp (это такой особый режим вычислений с плавающей точкой, возможно, распишу позже).
Расширяющее преобразование из float в double в обычном режиме (без strictfp ) может привести к потере точности.
Расширяющее преобразование int во float или из long во float , или из long в double может привести к потере точности, то есть результат может потерять несколько наименее значимых бит информации, что приведёт к получению округлённого значения.
Примеры расширяющего преобразования примитивов:
Несмотря на возможность потери точности расширяющее преобразование примитивов никогда не приводит к ошибкам во время выполнения.
Сужающее преобразование примитивов
Следующие преобразования называются сужающими преобразованиями примитивов:
- short -> byte , char
- char -> byte , short
- int -> byte , short , char
- long -> byte , short , char , int
- float -> byte , short , char , int , long
- double -> byte , short , char , int , long , float
Сужающее преобразование примитивов может привести к потере точности и даже к получению совсем другого числа из-за выхода за границу размерности.
Преобразование double во float может привести к потере точности и получению значения -0.0f или +0.0f вместо очень маленького значения double , а также к — Infinity и + Infinity вместо очень большого значения double . NaN из double преобразуется в NaN из float . Infinity в double преобразуется в Infinity в float того же знака.
При целочисленном сужающем преобразовании примитивов значения старших бит просто теряются, поэтому результат операции может запросто оказаться даже другого знака, чем исходное число.
Несмотря на возможность потери точности и даже получения совсем другого числа сужающее преобразование никогда не приводит к ошибке во время выполнения.
При сужающем преобразовании нужно явно приводить к нужному типу, указав его в скобках, иначе возникнет ошибка компиляции:
Арифметические операции
Арифметические операции позволяют выполнять сложение (операция «+»), вычитание (операция «-»), умножение (операция «*»), деление (операция «/») и взятие остатка (операция «%»). Эти операции имеют такие же приоритеты, что и в обычной математике, которую изучают в школе, то есть умножение и деление выполняется перед сложением и вычитанием.
При выполнении арифметических операций операнды всегда преобразуются как минимум в int (например при умножении двух переменных типа byte оба значения сначала преобразуются в int , и результат выражения будет int ).
При выполнении арифметической операции над операндами разных типов результат операции будет иметь наибольший тип, Что можно описать следующими правилами:
- Если один из операндов имеет тип double , то результат выражения имеет тип double , иначе смотри пункт 2.
- Если один из операндов имеет тип float , то результат выражения имеет тип float , иначе смотри пункт 3.
- Если один из операндов имеет тип long , то результат выражения имеет тип long , иначе результат выражения имеет тип int .
(например, при сложении int и long результат будет иметь тип long , а при сложении long и float результат будет иметь тип float , а при сложении float и double результат будет иметь тип double ).
Если результат операции с целочисленными данными выходит за диапазон, то старшие биты отбрасываются, и результирующее значение будет совершенно неверным. При попытке деления на 0 возникает исключение java . lang . ArithmeticException / zero .
При выполнении операций с плавающей точкой при выходе за верхнюю или нижнюю границу диапазона получается + Infinity ( Double . POSITIVE_INFINITY и Float . POSITIVE_INFINITY ) и — Infinity ( Double . NEGATIVE_INFINITY и Float . NEGATIVE_INFINITY ) соответственно, а при получении слишком маленького числа, которое не может быть нормально сохранено в этом типе данных получается -0.0 или +0.0.
При выполнении операций с плавающей точкой результат NaN ( Double . NaN и Float . NaN ) получается в следующих случаях:
- Когда один из операндов NaN
- В неопределённых результатах:
- Деления 0/0, ∞/∞, ∞/−∞, −∞/∞, −∞/−∞
- Умножения 0×∞ and 0×−∞
- Степень 1 ∞
- сложения ∞ + (−∞), (−∞) + ∞ и эквивалентные вычитания.
- Квадратный корень из отрицательного числа
- Логарифм отрицательного числа
- Тангенс 90 градусов и ему подобных (или π/2 радиан)
- Обратный синус и косинус от числа меньше −1 и больше +1.
Унарные операции
Унарными называются операции, которые имеют только один операнд. Унарные операции бывают префиксные и постфиксные.
Постфиксные унарные операции ставятся после операнда: