Операторы в java — шпаргалка с примерами
Содержание:
- Как создать класс в Java
- Математика
- Структуры данных
- Решение распространенных проблем
- Java: что за зверь?
- Операторы смещения бит
- Экспоненциальные и логарифмические функции
- Прочие операторы
- Логические операции в Java
- Методы класса
- Побитовые (поразрядные) операции
- Двойные фигурные скобки
- Оператор break
- Объекты
- Условные конструкции
- Класс Java Math
- Приоритет оператора Java Math
- Примеры простых тернарных операторов
Как создать класс в Java
Теперь можно приступить к созданию классов. Начнём с пользователя:
Слово public выступает модификатором доступа — он определяет, откуда будет доступен компонент. Для класса можно указать следующие модификаторы:
- public — доступно в любых частях программы (применимо и к другим компонентам);
- default — доступно только классам из того же пакета.
Теперь в основном файле можно создать объект класса User:
Мы указали для объекта user1 класс User, а после оператора присваивания указали ключевое слово new и запустили конструктор (об этом позже). Вот как будет выполнена программа:
Создание объекта называется объявлением экземпляра класса — тут же можно использовать конструктор, чтобы сразу задать значения атрибутам.
Для этого нужно в теле класса создать метод с таким же названием, что и класс. Ему можно передать аргументы, с которыми можно провести операции:
Обратите внимание, что внутри класса атрибуты вызываются с помощью ключевого слова this. Это нужно для того, чтобы компилятор не путался, с какой переменной работать — например, в случае, если у аргумента такое же имя, как и у атрибута:. Теперь, чтобы создать объект, нужно немного поменять код:
Теперь, чтобы создать объект, нужно немного поменять код:
Дальше можно создать класс для работы с сообщениями:
Обратите внимание, что в этот раз для атрибутов from и to мы задали модификатор private, а в качестве типа стоит User. Private позволяет закрыть доступ к элементам извне — то есть их можно менять только внутри методов самого класса
Это позволяет защитить атрибуты от незапланированного доступа. Если же вы хотите получать или менять атрибуты, можно воспользоваться getter и setter. Это специальные методы, которые позволяют обратиться к защищённой переменной:
Теперь можно написать код, который будет создавать сообщение:
Вот как это работает:
Математика
Float или Double?
Программисты часто не могут выбрать необходимую точность для чисел с плавающей запятой. Float требует всего 4 байта, но имеет только 7 значащих цифр, а Double в два раза точнее (15 цифр), но в два раза прожорливее.
Фактически, большинство процессоров могут одинаково эффективно работать как с Float, так и с Double, поэтому воспользуйтесь рекомендацией Бьорна Страуструпа (автор языка С++):
Проверка на нечетность
Можно ли использовать этот код для точного определения нечетного числа?
Надеюсь, вы заметили хитрость. Если мы решим таким образом проверить отрицательное нечетное число (например, -5), остаток от деления не будет равен единице, поэтому воспользуйтесь более точным методом:
Он не только решает проблему отрицательных чисел, но и работает более производительно, чем предыдущий метод. Арифметические и логические операции выполняются намного быстрее, чем умножение и деление.
Структуры данных
Комбинирование хеш-таблиц
Комбинирование двух хеш-таблиц вручную через цикл очень неэффективно. Вот альтернативное решение этой проблемы, которое вам возможно понравится:
Array или ArrayList?
Выбор между и зависит от специфики задачи Java, которую вы хотите решить. Запомните следующие особенности этих типов:
- Массив имеет фиксированный размер, и память для него выделяется во время объявления, а размер может динамически меняться.
- Массивы Java работают намного быстрее, а в намного проще добавлять и удалять элементы.
- При работе с скорее всего возникнет ошибка .
- может быть только одномерным, когда массивы Java могут быть многомерными.
Решение распространенных проблем
Содержимое директории
Java позволяет вам получать имена всех подкаталогов и файлов в папке в виде массива, который затем можно последовательно прочитать:
Выполнение консольных команд
Java позволяет выполнять консольные команды прямо из кода, используя класс
Очень важно не забывать об обработке исключений
Например, давайте попробуем открыть файл PDF через терминал Java (на Linux’e):
Воспроизведение звуков
Звук — важный компонент многих десктопных приложений и игр. Язык программирования Java предоставляет средства для работы с ним.
Отправка email
Отправить электронную почту на Java очень просто. Вам просто нужно установить Java Mail и указать путь к нему в пути к классам проекта.
Получение координат курсора
Чтобы фиксировать события мыши, вам необходимо реализовать интерфейс . Когда курсор попадает в определенную область, срабатывает обработчик события , из которого вы можете получить точные координаты (используя Swing для UI)
Перевод статьи «Top 25 Java Tricks, Tips, and Best Practices»
Java: что за зверь?
Java — мультифункциональный объектно-ориентированный язык со строгой типизацией.
Что это значит?
С мультифункциональностью всё достаточно просто: Java действительно почти «волшебная таблетка» — на ней можно разрабатывать десктопные приложения, приложения под Android, заниматься веб-разработкой… Подробнее об этом ниже.
Строгая (сильная) типизация не позволяет смешивать в выражениях разные типы и не выполняет автоматически неявные преобразования. Это добавляет мороки: какие-то части приходится прописывать самому, а свободы у вас меньше, — зато в обмен на это вы получаете надёжность.
Объектно-ориентированный язык — это язык, созданный по модели объектно-ориентированного программирования. В ней существуют классы и объекты. Классы — это типы данных, а объекты — представители классов. Вы создаёте их сами, даёте названия и присваиваете им свойства и операции, которые с ними можно выполнять. Это как конструктор, который позволяет построить то, что вы хотите. Именно с помощью этой системы объектов в основном программируют на Java.
Операторы смещения бит
И в заключение
занятия рассмотрим еще два распространенных битовых оператора
>> смещение
бит вправо
<< смещение
бит влево
int x = 160; // 10100000 System.out.println(x); x = x >> 1; // 01010000 (число 80) System.out.println(x); x = x >> 1; // 00101000 (число 40) System.out.println(x); x = x >> 1; // 00010100 (число 20) System.out.println(x); x = x >> 1; // 00010100 (число 10) System.out.println(x); x = x >> 1; // 00010100 (число 5) System.out.println(x); x = x >> 1; // 00010100 (число 2) System.out.println(x); x = x >> 1; // 00010100 (число 1) System.out.println(x);
Смотрите, что
здесь получается. Мы перед каждым выводом переменной x сдвигаем ее
биты на 1 вправо. В результате получаются вот такие десятичные числа. Заметили
закономерность? Да, это целочисленное деление числа на 2
Почему целочисленное?
Обратите внимание после 5 идет 2 – это как раз результат целочисленного деления
5/2=2 (как мы говорили на четвертом занятии когда проходили арифметические
операции)
Если же мы будем
сдвигать все на два бита
int x = 160; // 10100000 System.out.println(x); x = x >> 2; // 00101000 (число 40) System.out.println(x);
то получим число
40, то есть, 160:4 = 40 – это эквивалент целочисленного деления на 4. То есть,
получается, что операция сдвига вправо на n бит дает
целочисленное деление на .
По аналогии
работает и операция сдвига бит влево.
byte x = 5; // 00000101 System.out.println(x); x = (byte)(x << 1); // 00001010 (число 10) System.out.println(x);
Только здесь
получается эффект умножения на 2. Или при сдвиге на n бит влево,
получим умножение на .
Причем эти операции умножения и деления работают значительно быстрее, чем
традиционные арифметические операции умножения и деления. Поэтому, разработчики
различных алгоритмов для маломощных компьютеров стараются составить вычисления
так, чтобы они базировались на сдвиговых операциях, исключая прямое умножение и
деление.
Видео по теме
#1 Установка пакетов и первый запуск программы
#2 Структура программы, переменные, константы, оператор присваивания
#3 Консольный ввод/вывод, импорт пакетов
#4 Арифметические операции
#5 Условные операторы if и switch
#6 Операторы циклов while, for, do while
#7 Массивы, обработка элементов массива
#8 (часть 1) Строки в Java, методы класса String
#8 (часть 2) Строки — классы StringBuffer и StringBuider
#9 Битовые операции И, ИЛИ, НЕ, XOR
#10 Методы, их перегрузка и рекурсия
Экспоненциальные и логарифмические функции
Класс Java Math также содержит набор функций, предназначенных для экспоненциальных и логарифмических вычислений.
Math.exp()
Функция Math.exp() возвращает число Эйлера, возведенное в степень значения, указанного в качестве параметра:
double exp1 = Math.exp(1); System.out.println("exp1 = " + exp1); double exp2 = Math.exp(2); System.out.println("exp2 = " + exp2);
Итог:
exp1 = 2.718281828459045 exp2 = 7.38905609893065
Math.log()
Метод Math.log() предоставляет логарифм данного параметра. Основой для логарифма является число Эйлера. Таким образом, Math.log() предоставляет обратную функцию Math.exp(). Вот пример:
double log1 = Math.log(1); System.out.println("log1 = " + log1); double log10 = Math.log(10); System.out.println("log10 = " + log10);
Вывод:
log1 = 0.0 log10 = 2.302585092994046
Math.log10()
Метод Math.log10 работает подобно методу Math.log(), за исключением того, что использует 10 как основу для вычисления логарифма вместо числа Эйлера:
double log10_1 = Math.log10(1); System.out.println("log10_1 = " + log10_1); double log10_100 = Math.log10(100); System.out.println("log10_100 = " + log10_100);
Вывод:
log10_1 = 0.0 log10_100 = 2.0
Math.pow()
Функция Math.pow() принимает два параметра. Метод возвращает значение первого параметра, возведенное в степень второго параметра. Вот пример:
double pow2 = Math.pow(2,2); System.out.println("pow2 = " + pow2); double pow8 = Math.pow(2,8); System.out.println("pow8 = " + pow8);
Вывод:
pow2 = 4.0 pow8 = 256.0
Другими словами, пример Math.pow() вычисляет значения 2, 2 и 28, которые равны 4 и 256.
Math.sqrt()
Метод Math.sqrt() вычисляет квадратный корень заданного ему параметра:
double sqrt4 = Math.sqrt(4); System.out.println("sqrt4 = " + sqrt4); double sqrt9 = Math.sqrt(9); System.out.println("sqrt9 = " + sqrt9);
Вывод:
sqrt4 = 2.0 sqrt9 = 3.0
Прочие операторы
Есть несколько других операторов, поддерживаемых языком Java.
Тернарный оператор или условный оператор (?:)
Тернарный оператор — оператор, который состоит из трех операндов и используется для оценки выражений типа boolean. Тернарный оператор в Java также известен как условный оператор. Этот. Цель тернарного оператора или условного оператора заключается в том, чтобы решить, какое значение должно быть присвоено переменной. Оператор записывается в виде:
Пример
Ниже приведен пример:
Будет получен следующий результат:
Оператор instanceof
Оператор instanceof — проверяет, является ли объект определенного типа (типа класса или типа интерфейса) и используется только для переменных ссылочного объекта. Оператор instanceof записывается в виде:
Примеры
Если переменная ссылочного объекта в левой части оператора проходит проверку для класса/типа интерфейса на правой стороне, результатом будет значение true. Ниже приведен пример и описание оператора instanceof:
Будет получен следующий результат:
Этот оператор по-прежнему будет возвращать значение true, если сравниваемый объект является совместимым с типом на право назначения. Ниже приводится еще один пример:
Будет получен следующий результат:
Логические операции в Java
Логический операндtruefalse
- — логический операнд, его значение равно false
- — логический операнд, значение которого, очевидно, true
- — тоже может быть логическим операндом, как и Boolean a
- — не является логическим операндом, это просто переменная типа
- также не является логическим операндом. Это строка, текстовое значение которой — .
- Логическое отрицание, оно же или инверсия. В Java обозначается символом “” перед операндом. Применяется к одному операнду.
- Логическое и, оно же или конъюнкция. Обозначается символом “” между двумя операндами, к которым применяется.
- Логическое или в Java, оно же — , оно же — дизъюнкция. В Java обозначается символом “” между двумя операндами.
- Исключающее или, , строгая дизъюнкция. В Java обозначается символом “” между двумя операндами.
- В Java к логическим операторам можно отнести условное или, обозначаемое как , а также условное и — .
Примечание:Внимание!
Оператор Java | Имя | Тип | Краткое описание | Пример |
---|---|---|---|---|
Логическое “не” (отрицание) | Унарный | означает “не x”. Возвращает true если операнд является false. Возвращает false если операнд является true. |
Тогда |
|
Логическое И (, умножение) | Бинарный | Возвращает true если оба операнда равны true. |
тогда |
|
Логическое ИЛИ (, сложение) | Бинарный | Возвращает true если хотя бы один из операндов равен true. |
тогда |
|
Логическое исключающее ИЛИ () | Бинарный | Возвращает true, если один и только один из операндов равен true. Возвращает false, если оба операнда равны true или false. По сути, возвращает true, если операнды — разные. |
тогда |
|
Условное И (сокращённое логическое И) | Бинарный | То же самое, что и , но если операнд, находящийся слева от является false, данный оператор возвращает false без проверки второго операнда. | ||
Условное ИЛИ (сокращённое логическое ИЛИ) | Бинарный | То же самое, что и , но если оператор слева является true, оператор возвращает true без проверки второго операнда. |
Логические операции в курсе JavaRush Без логических операций никуда не деться, и в курсе JavaRush они появляются с первых уровней, вместе с условиями и типом данных boolean. Пользоваться методами математической логики программисты приучаются постепенно. Для более уверенных манипуляций с логическими конструкциями требуется определённая сноровка и понимание некоторых процессов. Так что подробнее и уже на совсем другом уровне к этим операциям подходят в конце квеста Multithreading, когда большинство студентов уже не слишком отвлекается непосредственно на синтаксис и конструкции, а старается вникать в суть задачи. |
Методы класса
В начале статьи я упомянул, что наши домашние животные могут перемещаться и есть. В отличие от параметров вроде веса и клички, это уже не свойства объекта, а его функции. В классе эти функции обозначают как методы.
Метод класса — это блок кода, состоящий из ряда инструкций, который можно вызывать по его имени. Он обязательно содержит возвращаемый тип, название, аргументы и тело метода.
Синтаксис метода в Java:
Строка возвращаемыйТип показывает, какого типа данные вернёт метод. Например, если в качестве возвращаемого типа мы поставим тип String, то метод должен будет вернуть строку, а если int — целое число.
Чтобы вернуть значение из метода, используется специальное слово return. Если мы хотим, чтобы метод ничего не возвращал, то вместо возвращаемого типа нужно использовать специальное слово void.
Аргументы — то, что нужно передать в метод при его вызове. Мы можем указать сколько угодно параметров через запятую либо не указывать ни одного.
Для примера напишем простейший метод с именем sum (пока что не в нашем классе Pet), который складывает два переданных числа и возвращает их результат:
Возвращаемый тип метода int, он указан перед именем sum. Далее идут два аргумента a и b, у обоих также указан тип int
Важно помнить, что возвращаемый тип и тип переменных не обязательно должны совпадать
Аргументы метода работают как обычные переменные — за пределами метода к ним никак нельзя получить доступ. Внутри метода мы складываем значения из переменных a и b, записываем полученное значение в переменную c. После этого мы возвращаем значение переменной c — только оно доступно вне метода.
Вот пример:
Мы передали в метод sum два значения 1 и 2, а на выходе получили результат их сложения 3. Также можно создать метод, который принимает значение типа String, а возвращает длину этой строки:
В этом случае у нас возвращаемый типа int, а параметр str — типа String.
Попробуем использовать этот метод:
Также мы можем создать метод, который ничего не возвращает, а просто печатает переданное слово в консоль:
Либо метод, который ничего не принимает на вход, а просто печатает «Привет!»:
В методах, которые ничего не возвращают, слово return можно опустить.
Обратите внимание, что return полностью прекращает выполнение метода:
Теперь попробуем вызвать этот метод, передав в него число 3:
В этом случае мы ничего не увидим в консоли, так как 3 меньше 5, а значит, отработает блок if и произойдёт выход из метода с помощью слова return.
Но если передадим 6, увидим нашу надпись «Привет!»:
Побитовые (поразрядные) операции
В следующей таблице представлены побитовые операции применяемые в языке Java:
Операция
Описание
~
Поразрядная унарная операция НЕ (дополнение)
&
Поразрядная логическая операция И (AND, побитовая конъюнкция)
|
Поразрядная логическая операция ИЛИ (OR, побитовая дизъюнкция)
^
Поразрядная логическая операция исключающее ИЛИ (XOR)
Побитовые операторы применяются к целочисленным типам , , , , . Побитовые операторы применяются к каждому отдельному биту каждого операнда.
Результаты выполнения побитовых логических операций:
A |
B |
A | B |
A & B |
A ^ B |
~A |
1 |
|||||
1 |
1 |
1 |
|||
1 |
1 |
1 |
1 |
||
1 |
1 |
1 |
1 |
1.1. Побитовое ИЛИ (OR , |)
Результирующий бит, полученный в результате выполнения оператора OR, равен 1, если соответствующий бит в любом из операндов равен 1.
1.2. Побитовое И (AND , &)
Значение бита, полученное в результате выполнения побитового оператора AND, &, равно 1, если соответствующие биты в операндах также равны 1. Во всех остальных случаях значение результирующего бита равно 0.
1.3. Побитовое исключающее ИЛИ (XOR , ^)
Результирующий бит, полученный в результате выполнения оператора XOR, ^, равен 1, если соответствующий бит только в одном из операндов равен 1. Во всех других случаях результирующий бит равен 0.
1.4. Побитовое НЕ (NOT , ~)
Унарный оператор NOT (Не), ~, называемый также побитовым дополнением, инвертирует все биты операнда.
Рассмотрим теперь применение побитовых операций в программе. В следующем примере также показано применение метода , который приводит десятичное значение к двоичному:
Двойные фигурные скобки
Помните быструю инициализацию массива?
Мы там просто перечисляли значение в фигурных скобках:
Примеры |
---|
Создателям Java понравилась идея использовать фигурные скобки для упрощенной записи данных в массив. Но как быть с коллекциями?
Для коллекций тоже хватило фантазии: разрешили использовать трюк с двойными фигурными скобками.
С сахаром | Без сахара |
---|---|
Если компилятор встретит код в примере слева, он преобразует его в код справа.
Код не становится сильно компактнее. Тут скорее экономия на мелочах: не нужно каждый раз писать . Это может быть выгодно, если имя переменной очень длинное.
Но если вы встретите в чьем-то проекте такой код, не удивляйтесь
Оператор break
Оператор
break позволяет прервать текущее выполнение
switch или цикла
for ,
while и
do-while и перейти к следующему оператору после него. Примеры:
Java
int n = 0;
while (true) {
System.out.println(n);
if (n == 10) break;
n++;
}
1 |
intn=; while(true){ System.out.println(n); if(n==10)break; n++; } |
Java
int n = 0;
do {
System.out.println(n);
if (n == 10) break;
n++;
} while (true);
1 |
intn=; do{ System.out.println(n); if(n==10)break; n++; }while(true); |
Java
for (int n = 0; 😉 {
System.out.println(n);
if (n == 10) break;
n++;
}
1 |
for(intn=;;){ System.out.println(n); if(n==10)break; n++; } |
Все приведённые выше примеры выводят в консоль числа от 0 до 10.
В случае вложенных циклов оператор
break прерывает выполнение самого глубокого из текущих циклов. Можно прервать внешний цикл, если указать для него метку:
Java
// метка для внешнего цикла.
outer_for:
for (int n = 0; n < 10; n++) {
//…
// метка для внутреннего цикла
inner_for:
for (int m = 0; m < 10; m++) {
// прерываем внешний цикл для n == 2 и m ==4
if ((n == 9) && (m == 4)) break outer_for;
// прерываем внутренний цикл для n == 7 и m == 2
if ((n == 7) && (m == 2)) break;
// можно прервать внутренний цикл и по метке.
if ((n == 9) && (m % 2 == 1)) break inner_for;
System.out.println(«n=» + n + «; m=» + m);
}
}
1 |
// метка для внешнего цикла. outer_for for(intn=;n<10;n++){ //… // метка для внутреннего цикла inner_for for(intm=;m<10;m++){ // прерываем внешний цикл для n == 2 и m ==4 if((n==9)&&(m==4))breakouter_for; // прерываем внутренний цикл для n == 7 и m == 2 if((n==7)&&(m==2))break; // можно прервать внутренний цикл и по метке. if((n==9)&&(m%2==1))breakinner_for; System.out.println(«n=»+n+»; m=»+m); } } |
Объекты
Объекты в Java работают по тому же принципу, что и все объекты в ООП: можно создавать сколько угодно объектов на основе классов и делать их любой сложности.
Обычно используют классы, прописанные в том же файле, что и программа. Если нужно использовать класс из другой программы, её подключают отдельно. Вот самый простой способ сделать объект на основе предыдущего класса с заказом:
Текст:
Михаил Полянин
Редактура:
Максим Ильяхов
Художник:
Даня Берковский
Корректор:
Ирина Михеева
Вёрстка:
Мария Дронова
Соцсети:
Олег Вешкурцев
Условные конструкции
Последнее обновление: 17.04.2018
Одним из фундаментальных элементов многих языков программирования являются условные конструкции. Данные конструкции
позволяют направить работу программы по одному из путей в зависимости от определенных условий.
В языке Java используются следующие условные конструкции: и
Конструкция if/else
Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); }
После ключевого слова ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в
блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.
Так как, в данном случае первое число больше второго, то выражение истинно и возвращает значение
. Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а
конкретно метод . Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок :
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); } else{ System.out.println("Первое число меньше второго"); }
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны.
С помощью выражения , мы можем обрабатывать дополнительные условия:
int num1 = 6; int num2 = 8; if(num1>num2){ System.out.println("Первое число больше второго"); } else if(num1<num2){ System.out.println("Первое число меньше второго"); } else{ System.out.println("Числа равны"); }
Также мы можем соединить сразу несколько условий, используя логические операторы:
int num1 = 8; int num2 = 6; if(num1 > num2 && num1>7){ System.out.println("Первое число больше второго и больше 7"); }
Здесь блок if будет выполняться, если равно и одновременно равно .
Конструкция switch
Конструкция switch/case аналогична конструкции , так как позволяет обработать сразу несколько условий:
int num = 8; switch(num){ case 1: System.out.println("число равно 1"); break; case 8: System.out.println("число равно 8"); num++; break; case 9: System.out.println("число равно 9"); break; default: System.out.println("число не равно 1, 8, 9"); }
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов
сase. И если совпадение найдено, то будет выполняет соответствующий блок сase.
В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Например, если бы убрали оператор в следующем случае:
case 8: System.out.println("число равно 8"); num++; case 9: System.out.println("число равно 9"); break;
то выполнился бы блок , (поскольку переменная num равна 8). Но так как в этом блоке оператор break отсутствует, то начал бы выполняться блок .
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default,
как в примере выше. Хотя блок default необязателен.
Также мы можем определить одно действие сразу для нескольких блоков case подряд:
int num = 3; int output = 0; switch(num){ case 1: output = 3; break; case 2: case 3: case 4: output = 6; break; case 5: output = 12; break; default: output = 24; } System.out.println(output);
Тернарная операция
Тернарную операция имеет следующий синтаксис: .
Таким образом, в этой операции участвуют сразу три операнда.
В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно , то
возвращается второй операнд; если условие равно , то третий. Например:
int x=3; int y=2; int z = x<y? (x+y) : (x-y); System.out.println(z);
Здесь результатом тернарной операции является переменная z. Сначала проверяется условие .
И если оно соблюдается, то z будет равно второму операнду — (x+y), иначе z будет равно третьему операнду.
НазадВперед
Класс Java Math
Класс Java Math предоставляет более сложные математические вычисления, чем те, которые предоставляют базовые математические операторы Java. Класс Math содержит методы для:
- нахождения максимального или минимального значений;
- значений округления;
- логарифмических функций;
- квадратного корня;
- тригонометрических функций (sin, cos, tan и т. д.).
Math находится в пакете java.lang, а не в пакете java.math. Таким образом, полное имя класса Math – это java.lang.Math.
Поскольку многие его функции независимы друг от друга, каждый метод будет объяснен в своем собственном разделе ниже.
Приоритет оператора Java Math
Как только вы начинаете комбинировать математические операторы Java в математических выражениях, становится важным контролировать, когда и какие вычисления выполнять, чтобы получить желаемый результат. Математические операторы Java имеют естественный приоритет операторов, который аналогичен приоритетам стандартных математических операторов.
Математические операторы * и / для умножения и деления имеют приоритет над операторами + и -. Это означает, что умножения и деления вычисляются перед сложением и вычитанием в математических выражениях. В случае наличия нескольких операторов * и / они будут рассчитаны слева направо. Посмотрите на это математическое выражение:
int result = 100 * 100 / 5 + 200 * 3 / 2;
Сначала выполняются умножения и деления. Есть две группы из трех умножений и делений. Каждая группа выполняется слева направо:
100 * 100 = 10000; 10000 / 5 = 2000;
200 * 3 = 600; 600 / 2 = 300;
После вычисления умножения и деления математическое выражение выглядит так:
int result = 2000 + 600;
Теперь сложения и вычитания выполняются. Таким образом, значение, присвоенное переменной результата, равно 2000 + 600 = 2600.
Вы можете контролировать приоритет оператора и последовательность вычислений в математических выражениях, используя круглые скобки. Выражения в скобках имеют более высокий приоритет, чем любой другой оператор. Внутри скобок применяется нормальный приоритет оператора. Вот математическое выражение из ранее, но с вставленными скобками, которые изменяют вычисления:
int result = 100 * 100 /(5 + 200) * 3 / 2;
Значение 100 все еще умножается на 100 (= 10 000), но теперь оно делится на 5 + 200 (= 205) вместо 5. После этого деления результат умножается на 3, а затем делится на 2. Результат выполнения 72 (округление вычислений влияет на результат).
Примеры простых тернарных операторов
Одним из применений тернарного оператора в Java является назначение минимального (или максимального) значения двух переменных третьей переменной, по существу заменяя вызов метода Math.min (a, b) или Math.max (a, b).
Вот пример, который присваивает минимуму из двух переменных, a и b, третьей переменной с именем minVal:
minVal = (a< b) ? a : b.
В этом коде, если переменная a меньше, чем b, minVal присваивается значение a; в противном случае minVal присваивается значение b.
Я думаю, что круглые скобки делают код немного легче для чтения, но опять же, они не являются обязательными, поэтому используйте любой синтаксис, который вы предпочитаете.
Вы можете использовать аналогичный подход, чтобы получить абсолютное значение числа, используя такой код:
int absValue = (a<0)? -а: а.
Первый операнд в тройном операторе должен быть логическим или оператором с логическим результатом. Если первый операнд равен true, то оператор возвращает второй операнд, иначе он возвращает третий операнд.