Как импортировать math в java
Перейти к содержимому

Как импортировать math в java

  • автор:

Класс Math и пакет java.math

Класс Math содержит методы, связанные с геометрией и тригонометрией и прочей математики. Методы реализованы как static, поэтому можно сразу вызывать через Math.methodName() без создания экземпляра класса.

В классе определены две константы типа double: E и PI.

Популярные методы для тригонометрических функций принимают параметр типа double, выражающий угол в радианах.

  • sin(double d)
  • cos(double d)
  • tan(double d)
  • asin(double d)
  • acos(double d)
  • atan(double d)
  • atan2(double y, double x)

Существуют также гиперболические функции: sinh(), cosh(), tanh().

Экспоненциальные функции: cbrt(), exp(), expm1(), log(), log10(), log1p(), pow(), scalb(), sqrt().

Из них хорошо знакомы возведение в степень — pow(2.0, 3.0) вернёт 8.0.

Также популярен метод для извлечения квадратного корня — sqrt(4.0). Если аргумент меньше нуля, то возвращается NaN. Похожий метод cbrt() извлекает кубический корень. Если аргумент отрицательный, то и возвращаемое значение будет отрицательным: -27.0-> -3.0.

  • abs() — возвращает абсолютное значение аргумента
  • ceil() — возвращает наименьшее целое число, которое больше аргумента
  • floor() — возвращает наибольшее целое число, которое меньше или равно аргументу
  • max() — возвращает большее из двух чисел
  • min() — возвращает меньшее из двух чисел
  • nextAfter() — возвращает следующее значение после аргумента в заданном направлении
  • nextUp() — возвращает следующее значение в положительном направлении
  • rint() — возвращает ближайшее целое к аргументу
  • round() — возвращает аргумент, округлённый вверх до ближайшего числа
  • ulp() — возвращает дистанцию между значением и ближайшим большим значением
  • copySign() — возвращает аргумент с тем же знаком, что у второго аргумента
  • getExponent() — возвращает экспоненту
  • IEEEremainder() — возвращает остаток от деления
  • hypot() — возвращает длину гипотенузы
  • random() — возвращает случайное число между 0 и 1 (единица в диапазон не входит)
  • signum() — возвращает знак значения
  • toDegrees() — преобразует радианы в градусы
  • toRadians() — преобразует градусы в радианы

Вычислим наибольшее и наименьшее числа из двух заданных значений.

 double value1 = 9.14; double value2 = 9.15; System.out.println("Maximum of value1 and value2 is " + Math.max(value1, value2)); System.out.println("Minimum of value1 and value2 is " + Math.min(value1, value2)); 

Большие числа

Если вам не хватает точности основных типов для представления целых и вещественных чисел, то можно использовать классы BigInteger и BigDecimal из пакета java.math, которые предназначены для выполнения действий с числами, состоящими из произвольного количества цифр.

Для преобразования обычного числа в число с произвольной точностью (называемое большим числом) вызывается статический метод valueOf():

 BigInteger bigIntegerA = BigInteger.valueOf(42); 

При работе с большими числами нельзя использовать привычные математические операции с помощью + или * и т.п. Вместо них следует использовать специальные методы add() (сложение), multiply() (умножение), divide() (деление) и т.д.

 BigInteger bigIntegerA = BigInteger.valueOf(42); BigInteger bigItBigIntegerB = bigIntegerA.add(bigIntegerA); BigInteger bigIntegerC = bigIntegerA.multiply(bigIntegerA); 

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

Java static import

Для того чтобы получить доступ к статическим членам классов, требуются указывать ссылку на класс.

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

public class WithoutStaticImport < public static void main(String[] args) < double value = Math.cos(Math.PI * 4); System.out.println(value); >>

Чтобы улучшить читабельность кода можно импортировать статические члены класса почти так же, как и обычные классы, и получить прямой доступ к статическим членам без указания имени класса. Для импорта используется оператор Java import static , после которого указывается полное имя класса и метод или переменная:

package oop; import static java.lang.Math.PI; import static java.lang.Math.cos; public class StaticImport < public static void main(String[] args) < double value = cos(PI * 4); System.out.println(value); >>

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

Как подключить math java

Класс Math содержит статические методы, связанные с геометрией, тригонометрией и другими базовыми математическими вычислениями. Этот класс входит в пакет java.lang , который неявно импортируется каждым классом в Java. Поэтому методы класса Math можно использовать без импорта

Math.abs(-3); // 3 Math.max(-10, 7); // 7 

Возможности Java: статический импорт

Эта статья была размещена на сайте sun.ru, но позже она стала недоступной. Я её вытащил из кеша поисковика и сохранил на всякий случай здесь.

Аккуратное и правильное использование import static улучшит читаемость вашего кода.

Статический импорт

Для того чтобы получить доступ к статическим членам классов, требуются указать ссылку на класс. К примеру, необходимо указать имя класса Math:

double r = Math.cos(Math.PI * theta);

Чтобы обойти это, иногда добавляют статические методы в интерфейс и наследуются от этого интерфейса. Это плохая идея. Фактически это настолько плохая идея, что для нее есть свое название: Constant Interface Antipattern (см. Effective Java, 17 статья). Дело в том, что использование статических членов класса другим классом всего лишь деталь реализации. Когда же класс реализует интерфейс, его члены становится частью публичного АРI этого класса. Детали реализации не должны становиться публичным программным интерфейсом.

Конструкция статического импорта позволяет получить прямой доступ к статическим членам без необходимости наследования от того типа, который содержит эти статические члены. Вместо этого, программа импортирует члены индивидуально:

import static java.lang.Math.PI;

или все целиком:

import static java.lang.Math.*;

Однажды импортированный статический член может быть использован без указания имени класса:

double r = cos(PI * theta);

Объявление статического импорта аналогично объявлению обычного импорта. При объявлении обычного импорта классы импортируются из пакетов, что позволяет их использовать без указания имени пакета перед именем класса. При объявлении статического импорта статические члены импортируются из классов, что позволяет им быть использованными без указания имени содержащего их класса.

Так когда же следует использовать статический импорт? Только в некоторых случаях! Используйте его только, если иначе вы вынуждены объявлять локальные копии констант или при неправильном использовании наследования (Constant Interface Antipattern).

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

Чрезмерное использование статического импорта может сделать вашу программу нечитаемой и тяжелой в поддержке ввиду того, что пространство имен увеличится из-за всех статических членов из вашего импорта. Тот, кто будет читать ваш код (включая вас, спустя несколько месяцев после написания кода) не будут знать какому из статически импортированных классов принадлежит тот или иной член. Импортирование всех статических методов из класса может быть частично вредно для читабельности; если вы нуждаетесь только в одном или двух методах, импортируйте их по-отдельности. Использованный умело, статический импорт может сделать вашу программу более наглядной, исключая из программного кода ненужные повторения имен классов.

Перевод Комарова Е., Дмитриев А., 24.12.2007 г.

Читайте также моё объяснение для начинающих программистов Константы, перечисления (enum), и static import’ы в Java.

Не поленитесь, и почитайте ещё несколько очень важных моих статей для начинающих программистов, студентов и джуниоров.
Также не забудьте вступить в группу IT Juniors куда я пытаюсь собирать ссылки на другие полезные статьи для вас и анонсы курсов и интернатуры в компаниях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *