Лекции (989962), страница 55
Текст из файла (страница 55)
Угол задается в радианах.double chislo17 = Math.tan ( 3.14 ); /* Тангенс. Существуют также методы asin(), acos(), atan(), означающиеарккосинус, арксинус и арктангенс, соответственно. */}}Для генерации случайных чисел можно воспользоваться и классом Random из пакета java.util. Пример:import java.util.Randomclass primer {public static void main(String args[ ] ) { // Запуск программыRandom generator1 = new Random (12345 ); /* Инициализирует генератор случайных чисел числом 12345.Если повторно проинициализировать генератор этим числом, то будетполучена такая же последовательность случайных чисел. Если незадать число, то для инициализации выберется значение системноготаймера (в миллисекундах, прошедших от 01.01.1970 г.)*/int chislo1 = generator1.nextInt ( ); // 32-разрядное случайное число типа intlong chislo2 = generator1.nextLong ( ); // 64-разрядное случайное число типа longfloat chislo3 = generator1.nextFloat ( ); // случайное число типа float в диапазоне от 0 до 1double chislo4 = generator1.nextDouble ( ); // случайное число типа double в диапазоне от 0 до 1double chislo5 = generator1.nextGaussian ( ); /* Случайное число нормального распределения.
Среднеезначение =0, стандартное отклонение = 1 */}}Дата и время:Для работы со значениями даты и времени можно воспользоваться следующими конструкциями:import java.util.Date // почти все функции работы с датой и временем находятся в этом классеclass primer {public static void main(String args[ ] ) { // Запуск программыlong timer1 = System.currentTimeMillis( ); //Число миллисекунд, прошедших с 01.01.1970Date timer2 = new Date ();// Создание объекта "дата"int vremya1 = timer2.getYear();// Получить число лет, прошедших с 1900 г, т.е. для 2001 = 101int vremya2 = timer2.getMonth();// Получить текущий месяц.
Январь = 0, Февраль = 1 и т.д.int vremya3 = timer2.getDate();// Получить текущую датуint vremya4 = timer2.getHours();// Получить часыint vremya5 = timer2.getMinutes();// Получить минутыint vremya6 = timer2.getSeconds();// Получить секундыint vremya7 = timer2.getDay();// Получить день недели: 0-воскресенье, 1-понедельник и т.д.// Если менеджер безопасности разрешит вам эти операции, то вы сможете модифицировать дату и время:timer2.setYear(102); // Установить 2002 годtimer2.setMonth(11); // Установить 12-й месяцtimer2.setDate(20);timer2.setHours(23);timer2.setMinutes(5);timer2.setSeconds(10); Ляхевич А.Г., 2000 - 2002 год}}Работа со строками:Работа со строками в Java реализована не достаточно удобно. Строки в Java фактически представляют собойстроковые константы: после объявления строки ее содержимое нельзя изменять.
Для изменения самойстроки нужно создать объект StringBuffer, которому можно присвоить значение строки, а потом егомодифицировать. Затем можно создать новую строку, равную значению объекта StringBuffer. Пример:ПрограммаКомментарииString stroka="Это";// Или более строго: String stroka =new String("Это");StringBuffer karman =new StringBuffer (stroka); // Создание буфера с именем karmankarman.insert(0, 'а') ;// Вставка "а" в 1 позицию строки (индексация - с нуля)karman.append ( '!' ) ;// Добавление "!" к строкеkarman.setCharAt (2, 'а');// Замена третьего символа на "а"stroka=new String (karman);// Присваивание нового значения строке.Единственное исключение из такой неудобной процедуры - можно складывать строки, например:String komy = "вам" ;String summa = "Привет "+komy+"братья" ;Над строками можно выполнять некоторые функции, в результате которых создаются новые измененныестроки (примеры см.
ниже). Переносить часть строки на новую строчку нельзя. В тексте строки нельзяиспользовать двойные или одинарные кавычки и косую черту "\". Если же необходимо этими символамивсе-таки воспользоваться, то применяют управляющие текстовые и восьмеричные константы:Константа ЗначениеКонстанта Значение\nперевод строки\\\u005c обратная косая черта\fперевод формата\007\u0007 звонок\rвозврат каретки\101\u0041 буква"А"\"\u0022 двойная кавычка\071\u0039 цифра "9"\'\u0027 одиночная кавычкаПример:String primer = "На разных \n строках и \" в кавычках \" буква \110, со звонком \007"Строки – это объекты, поэтому сравнивать строки при помощи простой операции равенства нельзя, т.к.
приэтом сравниваются не содержимое строк, а их объекты (которые будут разными, даже если содержимоестрок одинаково). Для сравнения строк надо пользоваться специальными методами.Пример:String stroka1 = “Это строка”;// создание объекта stroka1String stroka2 = “Это строка”;// создание объекта stroka2if (stroka1==stroka2) {/* операторы */} // условие не выполнится, т.к.
stroka1и stroka2 – это 2 разных объектаif ( stroka1.equals(stroka2) ) {/*операторы*/ } // а вот так сравнивать строки правильно (метод equals)boolean otvet = stroka.equalsIgnoreCase (stroka2); // сравнение без учета регистра.Для поиска слова в словаре можно воспользоваться методом compareTo ( ), который возвращает:0 - строки равны, число >0 – строка больше сравниваемой, число <0 – строка меньше сравниваемой.Пример:String slovo = “Сергей”;// создание объекта slovoint otvet1 = slovo.compareTo('Сам');// результат: otvet1>0int otvet2 = slovo.compareTo('Сеялка'); /* результат: otvet2<0 - значит слово "Сергей" находится по алфавитумежду словами "Сам " и "Сеялка".
*/Над строками можно выполнять и другие операции. Ниже приведены примеры некоторых функций дляработы со строками:String stroka = “Это строка”; // создание строки strokaboolean otvet = stroka.startsWith(‘Это’); /* переменная otvet будет true (истина), если строка начинается сослова “Это”, регистр учитывается */boolean otvet = stroka.endsWith(‘строка); /* переменная ответ будет true (истина), если строка кончаетсясловом “строка”, регистр учитывается */int otvet = stroka.indexOf('о'); // переменная otvet будет содержать номер позиции первой буквы "о" в строкеint otvet = stroka.indexOf('о',otvet+1); /* после того, как в предыдущем примере будет найдена первая буква"о", в этом примере поиск следующей буквы "о" в строке будетпродолжен, начиная со следующей после "o" позиции.
Так можнонайти все буквы "о", продолжая поиск до тех пор, пока otvet != 0*/ Ляхевич А.Г., 2000 - 2002 годint otvet = stroka.lastIndexOf('о'); // тоже самое, что и indexOf('о'), но поиск начинается с конца строки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 java.util.StringTokenizer;public static void main(String args[ ] ) {// Запуск программыString stroka = "Инструкция по пользованию мылом"; // Задаем строку для разборкиStringTokenizer razborka = new StringTokenizer (stroka); // Создаем объект "razborka", типа StringTokenizerSystem.out.println ("Число слов в строке = "+ razborka.countTokens( ) ); /* метод countTokens ( ) подсчитывает число слов в строке */System.out.println ("Строка содержит следующие слова: " );while (razborka.hasMoreTokens ( ) )// метод hasMoreTokens возвращает true, пока в строке есть словаSystem.out.println (razborka.nextToken ( ) ); // метод nextToken возвращает следующее слово в строке}8.11.
Блоки try .. catch .. finally, обработка исключений.При возникновении ошибки, в Java программе возбуждается исключение (exception). Ошибки можнообрабатывать при помощи конструкции try .. catch .. finally.Синтаксис:try { /* часть программы, где возможно возникновение ошибки */ }catch ( тип_исключения переменная ){ /* блок кода, выполняющийся при возникновении ошибки; */ }finally { /* блок кода, выполняющийся после блока try и блока catch, даже если ошибки не было */}Пример 1:try { /* часть программы, где возможно возникновение ошибки */ }catch ( NumberFormatException oshibka){ String text="Неверный формат числа :"+oshibka.toString; System.out.println(text); }catch ( ArithmeticException oshibka){ String text="Ошибка вычислений:"+oshibka.toString; System.out.println(text); }finally { System.out.println("Конец"); }Пример 2*:import java.io. IOExceptiontry { /* часть программы, где возможно возникновение ошибки */ }catch ( IOException oshibka){ System.out.println("Какая-то ошибка ввода-вывода"); }* Перехват различных типов ошибок определен в различных пакетах (классах), поэтому перед заданиемблока try ..