Вспомогательные классы для работы со строками в java
Содержание:
- Решение распространенных проблем
- Переход на «Зарплату и управление персоналом 3.1»
- Арифметические операторы в Java
- Автоувеличение и автоуменьшение на единицу
- Логические операции в Java
- Абстрактный класс и интерфейс
- Класс Java Math
- Выделение памяти
- Causes of Error Code 0xc0000001
- Запрещенные темы для публикаций
- 2 Целые типы
- Тригонометрические функции
- Математические вычисления и класс Math
- Операции сравнения
- Унарные операции
Решение распространенных проблем
Содержимое директории
Java позволяет вам получать имена всех подкаталогов и файлов в папке в виде массива, который затем можно последовательно прочитать:
Выполнение консольных команд
Java позволяет выполнять консольные команды прямо из кода, используя класс
Очень важно не забывать об обработке исключений
Например, давайте попробуем открыть файл PDF через терминал Java (на Linux’e):
Воспроизведение звуков
Звук — важный компонент многих десктопных приложений и игр. Язык программирования Java предоставляет средства для работы с ним.
Отправка email
Отправить электронную почту на Java очень просто. Вам просто нужно установить Java Mail и указать путь к нему в пути к классам проекта.
Получение координат курсора
Чтобы фиксировать события мыши, вам необходимо реализовать интерфейс . Когда курсор попадает в определенную область, срабатывает обработчик события , из которого вы можете получить точные координаты (используя Swing для UI)
Переход на «Зарплату и управление персоналом 3.1»
Сменила я тут работу и уже после того, как я приступила к исполнению обязанностей, мой новый начальник мне призналась, что выбор пал на меня только из-за того, что я знаю программу. Справедливости ради, эта уверенность была основана только на том, что я прошла тестирование, включающее только основные операции кадрового делопроизводства. Так или иначе, а работодатель попал в точку, нанимая меня в надежде, что я решу проблему: нужно перейти «с 8.2 на 8.3». Ничего сложного, скажет большинство, я тоже так говорю, но ситуация осложнялась некоторым количеством предшественников, которые уже «нафеячили» в программах до меня. Взять и сделать все заново мне не разрешили, так что пришлось исходить из того, что есть, и именно это дало пищу для размышлений и, в конце концов, привело к написанию этих рекомендаций.
Если перед Вами стоит задача перехода с ЗУП 2.5 на ЗУП 3.1, я попробую облегчить Вам жизнь этой статьей.
Арифметические операторы в Java
Для стандартных арифметических операций, таких как сложение, вычитание, умножение, деление в Java используются традиционные символы, к которым мы привыкли со школы:
Примечание: при операции деления, если оба аргумента являются целыми числами, то в результате получим целое число. Дробная часть, если такая имеется, отбросится. Если хотим получить число с дробной частью, то нужно, чтобы один из аргументов был типа double. Это можно указать в самом выражении при помощи добавления после числа .0 или .d. Пример:
В Java также имеется специальный оператор %, обозначающий остаток от делния.
Пример использования: дан массив целых чисел, вывести на консоль только те числа, которые делятся на 3.
Операции с присваиванием
Рассмотрим задачу вывода на экран 10 первых четных чисел чисел
строку
мы можем записать сокращенно
+= это оператор сложения с присваиванием. Подобные операторы есть для всех основных 5 операций, рассмотренных выше
Пример использования: Найти факториал числа 7.
Инкрементирование и декрементирование
Инкремент, обозначается ++ и увеличивает значение переменной на единицу. Декремент обозначается — и уменьшает значение на единицу. С инкрементом и декрементом мы часто встречаемся в цикле for.
Инкремент и декремент бывают двух форм
Префиксная форма:
Постфиксная форма
Различие префиксной и постфиксной формы проявляется только тогда, когда эти операции присутствуют в выражениях. Если форма префиксная, то сначала произойдет увеличение (или уменьшение) переменной на единицу, а потом с новым значением будет произведены дальнейшие вычисления. Если форма постфиксная, то расчет выражения будет происходить со старым значением переменной, а переменная увеличится (или уменьшится) на единицу после вычисления выражения. Пример
В первом случае сначала переменная a увеличится на 1, потом произойдет вычисление всего выражения. Во втором случае произойдет вычисление выражения при старом значении b = 3, и после вычисления b увеличится на 1, на результат в postfix это уже не повлияет.
Если вы поняли принцип работы постфиксного и префиксного инкремента/декремента, то предлагаю решить в уме такую задачу:
Вопрос: чему в итоге равны x и y? После того, как вы сделали предположение, проверьте его в java.
Задача со зведочкой. Дан код:
Какие числа будут выведены на экран? Почему? Разобраться самостоятельно.
Примечание: инкремент и декремент применяются только к переменной. Выражение вида 7++ считается недопустимым.
Автоувеличение и автоуменьшение на единицу
Очень часто вам придется увеличивать или уменьшать значение переменной на единицу. Поэтому существует специальные операторы увеличения (инкремента) и уменьшения (декремента). Для инкремента используются два плюса (++), а для декремента два минуса (—).
Данные операторы существуют в двух версиях — префиксной и постфиксной. Префиксный инкремент или декремент значит, что ++ или — записываются перед переменной или выражением.
В этом случае сначала выполняется операция, а затем выдается результат.
При постфиксном инкременте или декременте оператор записывается после переменной или выражения:
Здесь сначала выдается значение, и лишь затем выполняется операция.
Например, мы хотим ежегодно увеличивать возраст кота в анкете:
Данный код аналогичен более длинному варианту:
В простых выражениях особой разницы в постфиксной и префиксной формами нет, но в сложных выражениях может играть существенную роль. Поэтому не рекомендую использовать этот способ в выражениях, чтобы не запутаться самому. Пишите код проще.
Инкремент и декремент применяется только к значениям переменных, к числу применять этот способ нельзя.
Логические операции в 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 Math
Класс Java Math предоставляет более сложные математические вычисления, чем те, которые предоставляют базовые математические операторы Java. Класс Math содержит методы для:
- нахождения максимального или минимального значений;
- значений округления;
- логарифмических функций;
- квадратного корня;
- тригонометрических функций (sin, cos, tan и т. д.).
Math находится в пакете java.lang, а не в пакете java.math. Таким образом, полное имя класса Math — это java.lang.Math.
Поскольку многие его функции независимы друг от друга, каждый метод будет объяснен в своем собственном разделе ниже.
Выделение памяти
Коротко о том, как происходит выделение памяти со стороны кода в фоновом режиме:
- Каждый раз при создании объекта в Java он сохраняется в heap памяти.
- Примитивы и локальные переменные хранятся в stack памяти, переменные-члены — в heap.
- При многопоточности каждый поток имеет собственный stack, но находится в общей куче (heap). О многопоточности поговорим во второй части.
- При вызове какого-либо метода все методы и переменные помещаются в stack. По завершении вызова указатель стека (stack) уменьшается.
- 32-разрядная операционка тратит не более 4GB RAM на Java-приложения. В 64-разрядной затраты памяти на те же элементы увеличиваются вдвое.
- Примитивный тип int тратит в 4 раза меньше памяти, чем Integer.
Графическое представление распределения памяти
Таблица ниже перечисляет различные типы данных и их диапазоны хранимых значений:
Типы данных и диапазоны значений
Causes of Error Code 0xc0000001
If you have received this error on your PC, it means that there was a malfunction in your system operation. Common reasons include incorrect or failed installation or uninstallation of software that may have left invalid entries in your Windows registry, consequences of a virus or malware attack, improper system shutdown due to a power failure or another factor, someone with little technical knowledge accidentally deleting a necessary system file or registry entry, as well as a number of other causes. The immediate cause of the “Error Code: 0xc0000001” error is a failure to correctly run one of its normal operations by a system or application component.
Запрещенные темы для публикаций
2 Целые типы
В языке Java аж 4 целых типа: , , и . Они отличаются размером и диапазоном значений, которые могут хранить.
Тип
Самым часто используемым является тип . Его название происходит от Integer (целый). Все целочисленные литералы в коде имеют тип (если в конце числа не указана буква , или ).
Переменные этого типа могут принимать значение от до .
Это достаточно много и хватает почти для всех случаев жизни. Почти все функции, которые возвращают число, возвращают число типа .
Примеры:
Код | Пояснение |
---|---|
Метод возвращает длину строки | |
Поле содержит длину массива. |
Тип
Тип получил свое название от . Его еще называют короткое целое. В отличие от типа , его длина всего два байта и возможный диапазон значений от до .
То есть в нем даже число миллион не сохранишь. Даже 50 тысяч. Это самый редко используемый целочисленный тип в Java. В основном его используют, когда хотят сэкономить на памяти.
Допустим, у вас ситуация, когда заранее известно, что значения с которыми вы работаете не превышает 30 тысяч, и таких значений миллионы.
Например, вы пишете приложение, которое обрабатывает картинки сверхвысокой четкости: на один цвет приходится бит. А точек у вас в картинке — миллион. И вот тут уже играет роль, используете вы тип или .
Тип
Этот тип получил свое название от — его еще называют длинное целое. В отличие от типа , у него просто гигантский диапазон значений: от до
Почему же он не является основным целым типом?
Все дело в том, что Java появилась еще в середине 90-х, когда большинство компьютеров были 32-х разрядными. А это значило, что все процессоры были заточены под работу с числами из 32-х бит. С целыми числами из 64-х бит процессоры работать уже умели, но операции с ними были медленнее.
Поэтому программисты разумно решили сделать стандартным целым типом тип , ну а тип использовать только тогда, когда без него действительно не обойтись.
Тип
Это самый маленький целочисленный тип в Java, но далеко не самый редко используемый. Его название совпадает со словом — минимальная адресуемая ячейка памяти в Java.
Размер допустимых значений типа не так уж велик: от до . Но не в этом его сила. Тип чаще всего используется, когда нужно хранить в памяти большой блок обезличенных данных. Массив типа просто идеально подходит для этих целей.
Например, вам нужно куда-то скопировать файл.
Вам не нужно обрабатывать содержимое файла: вы просто хотите создать область памяти (буфер), скопировать в нее содержимое файла, а затем записать эти данные из буфера в другой файл. Массив типа — то, что нужно для этих целей.
Тем более, что в переменной-типа-массив хранится только ссылка на область памяти. При передаче значения этой переменной в какой-то метод произойдет только передача адреса в памяти, а сам блок памяти копироваться на будет.
Тригонометрические функции
Класс Java Math содержит набор тригонометрических функций. Эти функции могут вычислять значения, используемые в тригонометрии, такие как синус, косинус, тангенс и т. д.
Mathkpi
Константа Math.PI представляет собой двойное значение, значение которого очень близко к значению PI — математическому определению PI.
Math.sin()
Метод Math.sin() вычисляет значение синуса некоторого значения угла в радианах:
double sin = Math.sin(Math.PI); System.out.println("sin = " + sin);
Math.cos()
Метод Math.cos() вычисляет значение косинуса некоторого значения угла в радианах:
double cos = Math.cos(Math.PI); System.out.println("cos = " + cos);
Math.tan()
Метод Math.tan() вычисляет значение тангенса некоторого значения угла в радианах:
double tan = Math.tan(Math.PI); System.out.println("tan = " + tan);
Math.asin()
Метод Math.asin() вычисляет значение синусоиды значения от 1 до -1:
double asin = Math.asin(1.0); System.out.println("asin = " + asin);
Math.acos()
Метод Math.acos() вычисляет значение арккосинуса от 1 до -1:
double acos = Math.acos(1.0); System.out.println("acos = " + acos);
Math.atan()
Метод Math.atan() вычисляет значение арктангенса для значения от 1 до -1:
double atan = Math.atan(1.0); System.out.println("atan = " + atan);
Вот что говорит JavaDoc:
Если вам нужен этот метод, пожалуйста, прочитайте JavaDoc.
Math.sinh()
Метод Math.sinh() вычисляет значение гиперболического синуса значения между 1 и -1:
double sinh = Math.sinh(1.0); System.out.println("sinh = " + sinh);
Math.cosh()
Метод Math.cosh() вычисляет значение гиперболического косинуса от 1 до -1:
double cosh = Math.cosh(1.0); System.out.println("cosh = " + cosh);
Math.tanh()
Метод Math.tanh() вычисляет значение гиперболического тангенса значения от 1 до -1:
double tanh = Math.tanh(1.0); System.out.println("tanh = " + tanh);
Math.toDegrees()
Метод Math.toDegrees() преобразует угол в радианах в градусы:
double degrees = Math.toDegrees(Math.PI); System.out.println("degrees = " + degrees);
Math.toRadians()
Метод Math.toRadians() преобразует угол в градусах в радианы:
double radians = Math.toRadians(180); System.out.println("radians = " + radians);
Математические вычисления и класс Math
Последнее обновление: 28.10.2018
Для выполнения различных математических операций в Java в пакете java.lang определен класс
Math. Рассмотрим его основные методы:
-
: возвращает абсолютное значение для аргумента value
double result = Math.abs(-13.5); // 13.5
-
: возвращает арккосинус value. Параметр value должен иметь значение от -1 до 1
double result = Math.acos(1); // 0.0
-
: возвращает арксинус value. Параметр value должен иметь значение от -1 до 1
-
: возвращает арктангенс value
-
: возвращает кубический корень числа value
double result = Math.cbrt(27); // 3
-
: возвращает наименьшее целое число с плавающей точкой, которое не меньше value
double result = Math.ceil(2.34); // 3
-
: возвращает косинус угла d
-
: возвращает гиперболический косинус угла d
-
: возвращает основание натурального логарифма, возведенное в степень d
-
: возвращает наибольшее целое число, которое не больше d
double result = Math.floor(2.56); // 2
-
: возвращает целочисленный результат деления a на b
System.out.println(Math.floorDiv(1, 2)); // 0 System.out.println(Math.floorDiv(7, 2)); // 3 System.out.println(Math.floorDiv(9, 2)); // 4
-
: возвращает натуральный логарифм числа a
-
: возвращает натуральный логарифм числа (d + 1)
-
: возвращает десятичный логарифм числа d
-
: возвращает максимальное число из a и b
-
: возвращает минимальное число из a и b
-
: возвращает число a, возведенное в степень b
-
: возвращает случайное число от 0.0 до 1.0
-
: возвращает число double, которое представляет ближайшее к числу value целое число
System.out.println(Math.rint(2)); // 2.0 System.out.println(Math.rint(2.3)); // 2.0 System.out.println(Math.rint(2.5)); // 2.0 System.out.println(Math.rint(2.5001)); // 3.0 System.out.println(Math.rint(2.8)); // 3.0
-
: возвращает число d, округленное до ближайшего целого числа
System.out.println(Math.round(2.3)); // 2 System.out.println(Math.round(2.5)); // 3 System.out.println(Math.round(2.5001)); // 3 System.out.println(Math.round(2.8)); // 3
-
: возвращает произведение числа value на 2 в степени factor
System.out.println(Math.scalb(5, 3)); // 5*2*2*2 = 40 System.out.println(Math.scalb(3, 4)); // 3*2*2*2*2 = 48
-
: возвращает число 1, если число value положительное, и -1, если значение value отрицательное. Если value равно 0, то возвращает 0
System.out.println(Math.signum(2.3)); // 1 System.out.println(Math.signum(-2.3)); // -1
-
: возвращает синус угла value
-
: возвращает гиперболический синус угла value
-
: возвращает квадратный корень числа value
double result1 = Math.sqrt(16); // 4
-
: возвращает тангенс угла value
-
: возвращает гиперболический тангенс угла value
-
переводит радианы в градусы и — градусы в радианы
System.out.println(Math.toDegrees(3.14159)); // 180 System.out.println(Math.toRadians(90)); // 1,57079....
Также класс Math определяет две константы: и . Например, вычислим площадь круга:
import java.util.Scanner; public class Program { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Введите радиус круга: "); int radius = in.nextInt(); long area = Math.round(Math.PI * Math.pow(radius, 2)); System.out.printf("Площадь круга с радиусом %d равна %d \n", radius, area); } }
Консольный вывод:
Введите радиус круга: 10 Площадь круга с радиусом 10 равна 314
НазадВперед
Операции сравнения
Операции сравнения позволяют проверить, больше ли один операнд другого, либо что один операнд равен другому и т. д.
Вот список операций сравнения в Java:
== равенство (обратите внимание, что нужно использовать два символа равно для сравнения, а не один)
!= неравенство
> больше
>= больше или равно
Все операции сравнения возвращают логическое значение
boolean, что означает, что результат операции сравнения можно присвоить переменной этого типа и использовать в любом месте, где требуется значение типа
boolean.
Пример:
class Main {
public static void main(String[] args) {
int x = 3;
double d = 3.1;
System.out.println(x == d); // false
System.out.println(x > d); // false
System.out.println(x < d); // true
}
}
1 |
classMain{ publicstaticvoidmain(Stringargs){ intx=3; doubled=3.1; System.out.println(x==d);// false System.out.println(x>d);// false System.out.println(x<d);// true } } |
При сравнении используются следующие правила:
- Если один из операндов
NaN, то результат
false. -
-Infinity меньше
+Infinity - -0.0 с плавающей точкой равен +0.0 с плавающей точкой
- При сравнении примитивов разных типов значение меньшего типа преобразуется в больший тип.
Унарные операции
Унарными называются операции, которые имеют только один операнд. Унарные операции бывают префиксные и постфиксные.
Постфиксные унарные операции ставятся после операнда:
- Инкремент (увеличение на 1)
++ - Декремент (уменьшение на 1)
—
Примеры:
Java
int x = 3;
short y = 100;
x++; // после выполнения x становится равным 4.
y—; // после выполнения y становится равным 99.
1 |
intx=3; shorty=100; x++;// после выполнения x становится равным 4. y—;// после выполнения y становится равным 99. |
Префиксные унарные операции ставятся перед операндом:
- Унарный плюс (обозначает положительные числа, хотя числа положительными будут и без него)
+ - Унарный минус (обозначает отрицательные числа)
— - Логическое НЕ (инвертирует значение логического типа, превращая
true в
false и наоборот)
! - Префиксный инкремент (увеличивает значение на 1)
++ - Префиксный декремент (уменьшает значение на 1)
—
Примеры:
Java
int x1 = +10; // положительная десятка
int x2 = -x1; // -10
boolean b1 = true
boolean b2 = !b1; // false
++x1; // теперь x1 равен 11.
—x2; // теперь x2 равен -11
1 |
intx1=+10;// положительная десятка intx2=-x1;// -10 booleanb1=true booleanb2=!b1;// false ++x1;// теперь x1 равен 11. —x2;// теперь x2 равен -11 |
Отличие постфиксного и префиксного инкремента и декремента
С виду может показаться, что префиксный и постфиксные инкремент и декремент одинаковы, но это не так. Их отличие в том, что префиксный инкремент и декремент возвращают значение, которое получилось после операции увеличения и уменьшения соответственно, а постфиксный инкремент и декремент возвращают исходное значение, которое было до увеличения или уменьшения.
Пример:
Main.java
Java
class Main {
public static void main(String[] args) {
int x1 = 100;
int x2 = 145;
int y1 = ++x1;
int y2 = —x2;
// Вывод для префиксных операций
System.out.println(«\nPrefix ++, — test»);
System.out.println(«x1=» + x1 + «; y1=» + y1);
System.out.println(«x2=» + x2 + «; y2=» + y2);
// Возвращаем исходные значения
x1 = 100;
x2 = 145;
int z1 = x1—;
int z2 = x2++;
// Вывод для постфиксных операций
System.out.println(«\nPostfix ++, — test»);
System.out.println(«x1=» + x1 + «; z1=» + z1);
System.out.println(«x2=» + x2 + «; z2=» + z2);
}
}
1 |
classMain{ publicstaticvoidmain(Stringargs){ intx1=100; intx2=145; inty1=++x1; inty2=—x2; // Вывод для префиксных операций System.out.println(«\nPrefix ++, — test»); System.out.println(«x1=»+x1+»; y1=»+y1); System.out.println(«x2=»+x2+»; y2=»+y2); // Возвращаем исходные значения x1=100; x2=145; intz1=x1—; intz2=x2++; // Вывод для постфиксных операций System.out.println(«\nPostfix ++, — test»); System.out.println(«x1=»+x1+»; z1=»+z1); System.out.println(«x2=»+x2+»; z2=»+z2); } } |
Не помню, описывал ли я это, но две косые черты
// означают комментарий. Компилятор игнорирует любой текст, находящийся правее
//, что позволяет записать какое-нибудь пояснение для будущего читателя программы. Строки
System.out.println выводят текст в консоль.
Этот пример выводит в консоль следующее:
Prefix ++, — test
x1=101; y1=101
x2=144; y2=144
Postfix ++, — test
x1=99; z1=100
x2=146; z2=145
1 |
Prefix ++, — test x1=101; y1=101 x2=144; y2=144 Postfix ++, — test x1=99; z1=100 x2=146; z2=145 |
Как видно из примера
y1 и
y2 стали равны значениям
x1 и
x2, которые получились после осуществления операций инкремента и декремента соответственно, а
z1 и
z2 стали равны значениям
x1 и
x2, которые были до операций инкремента и декремента.