Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unix.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.91 Mб
Скачать

8.10. Математические функции, дата и время, работа со строками Математические функции:

В пакете java.lang имеется класс Math, который предоставляет некоторые полезные математические и тригонометрические функции. Пример: class primer {

public static void main(String args[ ] ) { // Запуск программы


case 2: case 3: case ' ': System.out.println ("two or three or space"); break; case default: System.out.println ("Default"); }

int chislo1 = Math.min (100, 700); // Возвращает минимальное значения из двух чисел 100 и 700 int chislo2 = Math.max (100, 700); // Возвращает максимальное значения из двух чисел 100 и 700 int chislo3 = Math.abs (-3); // Возвращает абсолютное значение числа

int chislo4 = ( int ) ( 10*Math.random ( ) ) + 1; /* Возвращает случайное целое число от 1 до 10.

double chislo7 = double chislo8 = double chislo9 = double chislo10 = double chislo11 = double chislo12 = double chislo14 = double chislo15 = Math.sin double chislo16 = Math.cos double chislo17 = Math.tan

} }

Здесь Math.random( ) возвращает случайное число от 0 до 1, а конструкция ( int ) ( выражение ) служит для преобразования выражения, находящегося под скобками, к типу int. Аналогично можно проводить преобразования и между другими типами данных. Наример: ( long ) ( 15.234 + 10.017 ) */ long chislo5 = Math.round (10.5); //Округление по правилам математики. Результат = 11 double chislo6 = Math.floor(10.7); //Округление всегда в меньшую сторону. Результат = 10 Math.ceil (10.3); //Округление всегда в большую сторону. Результат = 11 Math.rint (10.5); //Округление до ближайшего целого. Результат = 10 Math.sqrt ( 4 ); //Квадратный корень из 4. Math.pow ( 7, 1/3 ); // Число 7 в степени 1/3

Math.log Math.log Math.exp

( 7 ); // Натуральный логарифм числа 7. ( 7 ) / Math.log ( 10 ); // Десятичный логарифм числа 7. ( 7 ); // Экспонента числа 7, т.е. e7. Существует константа Math.E ( 3.14 ); // Синус. Угол задается в радианах. Радианы=градусы*Math.PI / 180. ( Math.PI / 2 ); // Косинус. Угол задается в радианах.

( 3.14 ); /* Тангенс. Существуют также методы asin(), acos(), atan(), означающие арккосинус, арксинус и арктангенс, соответственно. */

Для генерации случайных чисел можно воспользоваться и классом Random из пакета java.util. Пример: import java.util.Random class primer {

public static void main(String args[ ] ) { // Запуск программы

Random generator1 = new Random (12345 ); /* Инициализирует генератор случайных чисел числом 12345.

Если повторно проинициализировать генератор этим числом, то будет получена такая же последовательность случайных чисел. Если не задать число, то для инициализации выберется значение системного таймера (в миллисекундах, прошедших от 01.01.1970 г.)*/ int chislo 1 = generator1.nextInt ( ); // 32-разрядное случайное число типа int long chislo2 = generator1.nextLong ( ); // 64-разрядное случайное число типа long float chislo3 = generator1.nextFloat ( ); // случайное число типа float в диапазоне от 0 до 1 double chislo4 = generator1.nextDouble ( ); // случайное число типа double в диапазоне от 0 до 1 double chislo5 = generator1.nextGaussian ( ); /* Случайное число нормального распределения. Среднее

значение =0, стандартное отклонение = 1 */

}}

Дата и время:

Для работы со значениями даты и времени можно воспользоваться следующими конструкциями:

import java.util.Date // почти все функции работы с датой и временем находятся в этом классе class primer {

public static void main(String args[ ] ) { // Запуск программы

long timer1 = System.currentTimeMillis( ); //Число миллисекунд, прошедших с 01.01.1970

Date timer2 = new Date (); int vremya1 = timer2.getYear(); int vremya2 = timer2.getMonth(); int vremya3 = timer2.getDate(); int vremya4 = timer2.getHours(); int vremya5 = timer2.getMinutes(); int vremya6 = timer2.getSeconds(); int vremya7 = timer2.getDay();

// Создание объекта "дата"

// Получить число лет, прошедших с 1900 г, т.е. для 2001 = 101 // Получить текущий месяц. Январь = 0, Февраль = 1 и т.д. // Получить текущую дату // Получить часы // Получить минуты // Получить секунды

// Получить день недели: 0-воскресенье, 1-понедельник и т.д.

// Если менеджер безопасности разрешит вам эти операции, то вы сможете модифицировать дату и время:

timer2.setYear(102); // Установить 2002 год

timer2.setMonth(11); // Установить 12-й месяц

timer2.setDate(20);

timer2.setHours(23);

timer2.setMinutes(5);

timer2.setSeconds(10);

Работа со строками:

Работа со строками в Java реализована не достаточно удобно. Строки в Java фактически представляют собой строковые константы: после объявления строки ее содержимое нельзя изменять. Для изменения самой строки нужно создать объект StringBuffer, которому можно присвоить значение строки, а потом его

Программа

Комментарии

String stroka="3TO";

StringBuffer karman =new StringBuffer (stroka); karman.insert(0, 'а') ; karman.append ( '!' ) ; karman.setCharAt (2, 'а'); stroka=new String (karman);

// Или более строго: String stroka =new String("Это");

// Создание буфера с именем karman

// Вставка "а" в 1 позицию строки (индексация - с нуля)

// Добавление "!" к строке

// Замена третьего символа на "а"

// Присваивание нового значения строке.

Единственное исключение из такой неудобной процедуры - можно складывать строки, например: String komy = "вам" ;

String summa = "Привет "+komy+"братья" ;

Над строками можно выполнять некоторые функции, в результате которых создаются новые измененные строки (примеры см. ниже). Переносить часть строки на новую строчку нельзя. В тексте строки нельзя использовать двойные или одинарные кавычки и косую черту "\". Если же необходимо этими символами

Константа

Значение

\n

перевод строки

\f

перевод формата

\r

возврат каретки

\"

\u0022 двойная кавычка

\'

\u0027 одиночная кавычка

Пример:

стовые и вос Константа

ьмеричные константы: Значение

\\

\u005c обратная косая черта

\007

\u0007 звонок

\101

\u0041 буква" А"

\071

\u0039 цифра "9"

String primer = "На разных \n строках и \" в кавычках \" буква \110, со звонком \007"

Строки - это объекты, поэтому сравнивать строки при помощи простой операции равенства нельзя, т.к. при этом сравниваются не содержимое строк, а их объекты (которые будут разными, даже если содержимое строк одинаково). Для сравнения строк надо пользоваться специальными методами. Пример:

String stroka1 = "Это строка"; // создание объекта stroka1

String stroka2 = "Это строка"; // создание объекта stroka2

if (stroka1==stroka2) {/* операторы */} // условие не выполнится, т.к. stroka^ stroka2 - это 2 разных объекта if ( stroka1.equals(stroka2) ) {/*операторы*/ } // а вот так сравнивать строки правильно (метод equals) boolean otvet = stroka.equalslgnoreCase (stroka2); // сравнение без учета регистра.

Для поиска слова в словаре можно воспользоваться методом compareTo ( ), который возвращает: 0 - строки равны, число >0 - строка больше сравниваемой, число <0 - строка меньше сравниваемой. Пример:

String slovo = "Сергей"; // создание объекта slovo

int otvet1 = slovo.compareTo('Сам'); // результат: otvet1>0

int otvet2 = slovo.compareTo('Сеялка'); /* результат: otvet2<0 - значит слово "Сергей" находится по алфавиту

между словами "Сам " и "Сеялка". */

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

String stroka = "Это строка"; // создание строки stroka

boolean otvet = stroka.startsWith('Это'); /* переменная otvet будет true (истина), если строка начинается со

слова "Это", регистр учитывается */ boolean otvet = stroka.endsWith('строка); /* переменная ответ будет true (истина), если строка кончается

словом "строка", регистр учитывается */ int otvet = stroka.indexOf('о'); // переменная otvet будет содержать номер позиции первой буквы "о" в строке int otvet = stroka.indexOf('о',otvet+1); /* после того, как в предыдущем примере будет найдена первая буква

"о", в этом примере поиск следующей буквы "о" в строке будет продолжен, начиная со следующей после "o" позиции. Так можно найти все буквы "о", продолжая поиск до тех пор, пока otvet != 0*/

int otvet = stroka.lastIndexOf('о'); // тоже самое, что и indexO^'), но поиск начинается с конца строки int otvet = stroka.lastIndexOf('о', otvet-1 ); // аналогично примеру выше

int otvet = stroka.indexOf('Это'); /* можно определять позицию не только отдельного символа, но и

подстроки */

char bukva = stroka.charAt (3); /* в переменную bukva будет помещен 4-й символ строки (индекс первого

символа строки = 0) */ char massiv [ ] = new char [20]; // создается массив из 20-ти символов

stroka.getChars(5,10,massiv, 2); /* строка с 6 по 11 символ, посимвольно помещается в массив, начиная с 3-ей

позиции в массиве. Существует аналогичный метод getBytes ( ). */ String stroka2 = new String ( massiv [ ], 3, 2); /* создается новая строка длиной 2 символа, значения для строки

берутся, начиная с 4-ой позиции в массиве */ String stroka2 = stroka.subString(4); /* выделение подстроки из строки "stroka", начиная с 5-ой позиции и до

конца строки */

String stroka2 = stroka.subString(4 ); /* выделение подстроки из строки "stroka", начиная с 5-ой позиции и до

конца строки */

String stroka2 = stroka.subString(4, 9 ); /* выделение подстроки из строки "stroka", начиная с 5-ой и

заканчивая 10-ой позицией строки */ String stroka2 = stroka.replace('о', 'а'); // заменяет в строке все буквы "о" на букву "а" String stroka2 = stroka.toUpperCase( ); // преобразует строку в верхний регистр String stroka2 = stroka.toLowerCase( ); // преобразует строку в нижний регистр

int chislo=10; String stroka = String.valueOf(chislo); // переводит практически любой тип данных в тип String

Использование класса String Tokenizer (разбивка строк на слова):

Иногда необходимо разбить введенную пользователем строку на отдельные слова (например, при анализе запроса к поисковой системе). Для этого в пакете java.util определен специальный класс StringTokenizer, который разбивает строук на слова, ориентируясь на пробелы в качестве разделителей. Пример программы с использованием этого класса приведен ниже: class primer {

import j ava.util.StringTokenizer;

public static void main(String args[ ] ) { // Запуск программы

String stroka = "Инструкция по пользованию мылом"; // Задаем строку для разборки StringTokenizer razborka = new StringTokenizer (stroka); // Создаем объект "razborka", типа StringTokenizer System.out.println ("Число слов в строке = "+ razborka.countTokens( ) ); /* метод countTokens ( ) подсчиты­вает число слов в строке */

System.out.println ("Строка содержит следующие слова: " );

while (razborka.hasMoreTokens ( ) ) // метод hasMoreTokens возвращает true, пока в строке есть слова

System.out.println (razborka.nextToken ( ) ); // метод nextToken возвращает следующее слово в строке }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]