Презентация по Программированию. Книга Программирование на Java для начинающих
Скачать 4.47 Mb.
|
JAVA Pi.java Совет Вычисленное значение π обычно имеет достаточную точность. 85 Метод Math.sqrt() возвращает квадратный корень числа, указыва- емый в качестве единственного аргумента. Оба этих метода возвращают значение типа double. 1. Создайте новую программу с именем Power, содержащую стандарт- ный метод main. class Power { public static void main ( String[] args ) { } } 2. Внутри главного метода объявите и проинициализируйте целочис- ленную переменную, используя аргумент командной строки. int num = Integer.parseInt( args[0] ) ; 3. Произведите математические вычисления, приведя результаты к целочисленному типу. int square = (int) Math.pow( num , 2 ) ; int cube = (int) Math.pow( num , 3 ) ; int sqrt = (int) Math.sqrt( num ) ; 4. Выведите результаты вычислений. System.out.println( num + " в квадрате равно " + square ) ; System.out.println( num + " в кубе равно " + cube ) ; System. out.println( "Квадратный корень из " + num + " равен "+ sqrt ) ; 5. Сохраните программу под именем Power.java, затем скомпилируйте и запустите. JAVA Power.java На заметку Оба этих примера можно улучшить, если добавить блок операторов try catch, чтобы отловить пользо- вательские ошибки, — см. главу 4. 5. Р а бо т а с данными 86 Округление чисел Класс Math внутри пакета java.lang предлагает три метода для окру- гления чисел с плавающей точкой до ближайшего целого. Простейший из методов Math.round() округляет число, являющееся его аргументом, вверх или вниз до ближайшего целого. Метод Math.floor() производит округление до ближайшего целого вниз, а метод Math.ceil() округляет до ближайшего целого вверх. В то время как метод Math.round() возвращает значение целочислен- ного типа (int), методы Math.floor() и Math.ceil() возвращают зна- чение типа double. 1. Создайте новую программу с именем Round, содержащую стандарт- ный метод main. class Round { public static void main ( String[] args ) { } } 2. Внутри главного метода объявите и проинициализируйте пере- менную типа float. float num = 7.25f ; 3. Выведите округленное значение, которое приобрело тип int в ре- зультате округления. System.out.println( num+" округленное равно "+Math.round( num ) ); 4. Выведите округленное значение в виде значений типа double. System.out.println( num+" округленное вниз равно " +Math.floor( num ) ); System.out.println( num+" округленное вверх равно " + Math.ceil( num ) ) ; 5. Сохраните программу под именем Round.java, затем скомпилируй- те и запустите. JAVA Round.java Совет По умолчанию метод Math. round() будет округлять в сторону увеличения — та- ким образом, 7,5 округлит- ся до 8. 87 Класс Math пакета java.lang предлагает два метода для сравнения двух числовых значений — это методы Math.max() и Math.min(), принимаю- щие в качестве двух своих аргументов числа. Math.max() возвращает большее из двух чисел, а Math.min() — меньшее из них. Сравниваемые числа, используемые этими двумя методами, могут иметь любой из числовых типов данных, но возвращаемый результат будет всегда иметь тип double. 1. Создайте новую программу с именем Compare, содержащую стан- дартный метод main. class Compare { public static void main ( String[] args ) { } } 2. Внутри главного метода объявите и проинициализируйте две пере- менных типа float и типа int. float num1 = 24.75f ; int num2 = 25 ; 3. Выведите большее из двух значений. System.out.println( "Наибольшее: " + Math.max( num1, num2 ) ) ; 4. Выведите меньшее из двух значений. System.out.println( "Наименьшее: " + Math.min( num1, num2 ) ) ; 5. Сохраните программу под именем Compare.java, затем скомпили- руйте и запустите. JAVA Compare.java 5. Р а бо т а с данными 88 Генерация случайных чисел Класс Math пакета java.lang предоставляет возможность для генера- ции случайных чисел при помощи метода Math.random(), который воз- вращает случайное число двойной точности (типа double) в диапазоне от 0,0 до 0,999. Желаемый диапазон можно расширить при помощи умножения на случайное число. Например, умножив на 10, можно соз- дать случайное число от 0,0 до 9,999. После этого, если округлить по- лученное число при помощи метода Math.ceil(), то полученное целое число попадает в диапазон от 1 до 10. 1. Создайте новую программу с именем Random, содержащую стан- дартный метод main. class Random { public static void main ( String[] args ) { } } 2. Внутри главного метода присвойте переменной типа float значе- ние случайного числа и выведите это значение. float random = (float) Math.random() ; System.out.println( "Случайное число: " + random ) ; 3. Второй переменной типа float присвойте значение случайного числа, умноженное на 10, и также выведите ее значение. float multiplied = random * 10 ; System.out.println( "Умноженное на 10: " + multiplied ) ; 4. Теперь занесите округленное целое значение, полученное в преды- дущем шаге случайного числа, в переменную типа int, затем вы- ведите ее значение. int randomInt = (int) Math.ceil( multiplied ) ; System.out.println( "Случайное целое: " + randomInt ) ; 5. Сохраните программу под именем Random.java, затем скомпили- руйте и запустите. JAVA Random.java Совет Программа, моделирующая лотерею и описанная далее, комбинирует все эти три шага в одном операторе. 89 При помощи метода Math.random() можно сгенерировать последова- тельность из шести неповторяющихся целых чисел в диапазоне от 1 до 49 включительно, чтобы смоделировать выпадение номеров в ло- терее. 1. Создайте новую программу с именем Lottery, содержащую стан- дартный метод main. class Lottery { public static void main ( String[] args ) { } } 2. Внутри главного метода создайте целочисленный массив из 50 элемен тов, а затем заполните элементы с 1 по 49 целыми числа- ми от 1 до 49. int[] nums = new int[50] ; for( int i = 1 ; i < 50 ; i++ ) { nums[i] = i ; } 3. Перемешайте значения в элементах массива от 1 до 49. for( int i = 1 ; i < 50 ; i++ ) { int r = (int) Math.ceil( Math.random() * 49 ) ; int temp = nums[i] ; nums[i] = nums[r] ; nums[r] = temp ; } 4. Выведите только те значения, которые содержатся в элементах от 1 до 6. for ( int i = 1 ; i < 7 ; i++ ) { System.out.print( Integer.toString( nums[i]) + " " ); } 5. Сохраните программу под именем Lottery.java, затем скомпилируй- те и запустите три раза, чтобы произвести три различных последо- вательности чисел. JAVA Lottery.java Совет К данной программе мы вер- немся при изучении графи- ческого пользовательского интерфейса в главе 10. 5. Р а бо т а с данными 90 Управление строками В языке Java строка (элемент типа String) представляет собой 0 или более символов, заключенных в кавычки. Корректными строками яв- ляются, например: String txt1 = "Моя первая строка" ; String txt2 = "" ; String txt3 = "2" ; String txt4 = "null" ; Пустые кавычки в примере с переменной txt2 инициализируют пере- менную, содержащую пустую строку. Числовое значение, присвоенное переменной txt3, — это строковое представление числа. Ключевое сло- во языка Java null обычно представляет собой отсутствие какого-либо значения, но оно является простым строковым литералом , если заклю- чено в кавычки. Строка в языке Java, по существу, является набором символов, каждый из которых содержит собственные данные, подобно элементам масси- ва. Поэтому логично представлять строку как массив символов и, рабо- тая с ней, применять характеристики массива. Класс String является частью базового пакета java.lang и предостав- ляет метод length(), который возвращает размер строки подобно свойству массива length. Каждая строковая переменная создается как экземпляр класса String, поэтому методы данного класса можно ис- пользовать, применив точечную запись к имени переменной. Напри- мер, чтобы получить размер строки, сохраненной в переменной txt, мы запишем txt.length(). В классе String пакета java.lang существует альтернатива оператору конкатенации + для объединения строковых значений друг с другом — это метод concat(), который требует единственного аргумента, опре- деляющего вторую строку, добавляемую к основной. Например, чтобы добавить строку txt1, хранящуюся в переменной txt2, к строке, храня- щейся в txt1, мы напишем txt1.concat( txt2 ). Внимание Array.length — это свой- ство, но String.length() — это метод, поэтому он содержит скобки. 91 1. Создайте новую программу с именем StringLength, содержащую стандартный метод main. class StringLength { public static void main ( String[] args ) { } } 2. Внутри главного метода создайте и проинициализируйте две пере- менные строкового типа. String lang = "Java" ; String series = " in easy steps" ; 3. Добавьте еще одну строковую переменную и присвойте ей значе- ние двух объединенных выше созданных строк. String title = lang.concat( series ) ; 4. Выведите объединенную строку, используя знаки кавычек, и ее размер. System.out.print( "\"" + title + "\" содержит " ) ; System.out.println( title.length() + " символов" ) ; 5. Сохраните программу под именем StringLength.java, затем скомпи- лируйте и запустите. JAVA StringLength.java На заметку Знаки кавычек не являют- ся частью строки, поэтому не включаются в подсчет символов, в отличие от про- белов. 5. Р а бо т а с данными 92 Сравнение строк Класс String пакета java.lang предоставляет полезный метод equals(), он был показан в главе 4, где оценивался аргумент командной строки, представленный аргументом args[0]. Данный метод также можно ис- пользовать для сравнения любых двух строковых переменных, исполь- зуя точечную запись — имя метода ставится после имени переменной, а вторая переменная является аргументом. Например, для сравнения переменных txt2 и txt1 запишем txt1.equals( txt2 ). В случае если обе переменные содержат одни и те же символы в одинаковом порядке, то метод возвращает значение true, в противном же случае возвращает значение false. Строки, которые содержат одинаковые буквы, но в разных регистрах, не являются равными (например, Java и JAVA), поскольку у символов различаются коды ASCII. Например, значение символа верхнего реги- стра A равно 65, в то время как символ нижнего регистра a имеет зна- чение 97. В программах очень часто используется сравнение введенной пользова- телем строки с нужной строкой, чтобы введенная строка соответство- вала определенному регистру. Для этих целей класс String предлагает два метода: toUpperCase() и toLowerCase(). Входная строка указыва- ется этим методам в качестве аргумента, а они, в свою очередь, воз- вращают трансформированную строку. Типичным примером может являться ситуация, когда введенный пользователем строковый пароль преобразуется к нижнему регистру, перед тем как будет сравниваться с верным паролем, хранящимся в программе в нижнем регистре. Это позволит пользователю вводить свой пароль не глядя на регистр, в том случае, если регистры, независимые от паролей, разрешены. Точечная запись позволяет использовать методы друг за другом, выполняя операции последовательно. Это означает, что запись toLowerCase().equals() может быть использована для преобразова- ния строкового значения к нижнему регистру, а затем сравнения по- лученного результата с указанным аргументом. 1. Создайте новую программу с именем StringComparison, содержа- щую стандартный метод main. class StringComparison { public static void main ( String[] args ) { } } Внимание Будьте внимательны при написании заглавных букв C в названии методов toUpperCase и toLowerCase. 93 2. Внутри главного метода создайте и проинициализируйте строко- вую переменную, содержащую корректный пароль из символов нижнего регистра. String password = "bingo" ; 3. Добавьте блок операторов try catch, для того чтобы перехватить исключение, которое возникнет в случае, если аргумент, представ- ляющий пароль, не будет введен. try { } catch( Exception e ) { System.out.println( "Требуется ввод пароля." ) ; } 4. Добавьте блок if else в фигурные скобки оператора try для оцен- ки введенного пользователем аргумента. if ( args[0].toLowerCase().equals( password ) ) { System.out.println( "Пароль подтвержден." ) ; } else { System.out.println( "Неверный пароль." ) ; } 5. Сохраните программу под именем StringComparison.java, затем скомпилируйте и запустите. JAVA StringComparison.java 5. Р а бо т а с данными 94 Поиск строк Класс String пакета java.lang предлагает методы startsWith() и endsWith() для сравнения частей строк. Данные метода весьма по- лезны, например, при нахождении строк, имеющих одинаковое начало либо одинаковое окончание. Когда часть строки соответствует указан- ному аргументу, метод возвращает значение true, в противном случае возвращает значение false. Существует возможность скопировать часть какой-то строки, указав позицию первого символа, с которого нужно начинать копировать, в качестве аргумента для метода substring(). Данный метод возвратит так называемую подстроку к оригинальной строке, начиная с указан- ной стартовой позиции и заканчивая последним символом первона- чальной строки. Метод substring() может принимать необязательный второй аргу- мент, который будет указывать позицию последнего копируемого сим- вола. В этом случае метод возвратит подстроку первоначальной стро- ки, начиная с указанной стартовой позиции и заканчивая указанной конечной позицией. Для поиска символа или подстроки в строке используется метод indexOf() . Данный метод возвращает числовую позицию первого вхождения указанного символа или подстроки внутри обрабатывае- мой строки. Если соответствие не найдено, то метод возвращает зна- чение -1. 1. Создайте новую программу с именем StringSearch, содержащую стандартный метод main. class StringSearch { public static void main ( String[] args ) { } } 2. Внутри главного метода создайте и проинициализируйте строко- вый массив, содержащий названия книг. String[] books = { "Java in easy steps", "XML in easy steps" , "HTML in easy steps" , "CSS in easy steps" , "Gone With the Wind" , "Drop the Defense" } ; JAVA StringSearch.java 95 3. Создайте и проинициализируйте три целочисленных переменных- счетчика. int counter1 = 0 , counter2 = 0 , counter3 = 0 ; 4. Добавьте цикл for для обхода строкового массива, выводя первые четыре символа каждого названия. for ( int i = 0 ; i < books.length ; i++ ) { System.out.print( books[i].substring( 0,4 ) + " | " ) ; } 5. Добавьте в блок цикла for оператор для подсчета названий, содер- жащих указанное окончание. if ( books[i].endsWith( "in easy steps" ) ) counter1++ ; 6. Добавьте еще один оператор в блок цикла for для подсчета назва- ний, содержащих указанное начало. if ( books[i].startsWith( "Java" ) ) counter2++ ; 7. Добавьте еще один оператор для подсчета названий, не содержа- щих указанную подстроку. if ( books[i].indexOf( "easy" ) == -1 ) counter3++ ; 8. В конец главного метода добавьте следующие операторы для выво- да результатов каждого поиска. System.out.println( "\nНайдено " + counter1 + " названий из этой серии" ) ; System.out.println( "Найдено " + counter2 + " названий с Java" ) ; System.out.println( "Найдено " + counter3 + " других названий" ) ; 9. Сохраните программу под именем StringSearch.java, затем скомпи- лируйте и запустите. На заметку Оператор ! NOT не может использоваться для провер- ки того, что метод indexOf() выдал ошибку, поскольку он возвращает не логическое значение, а целое. |