|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Основные структуры языка JavaОсновные структуры языка JavaФакультет "Информатика и системы управления" Методические указания к лабораторной работе по курсу "Распределенные системы обработки информации" Основные структуры языка Java Москва 2004 г. Оглавление
Ознакомиться с материалом, предоставленном в приложении к данным методическим указаниям. Ознакомиться с текстом задания к лабораторной работе в соответствии с вариантом и написать программу. Задания к лабораторной работеЗадание 1Номер задания соответствует порядковому номеру в журнале (по модулю 14).1. Написать программу, которая просит ввести два числа, получает эти два числа от пользователя, а затем печатает сумму, разность, произведение и частное этих чисел.2. Написать программу, запрашивающую у пользователя три числа и печатающую сумму, произведение, среднее значение, меньшее и большее их этих чисел.3. Написать программу, принимающую от пользователя радиус круга и печатающую диаметр круга, длину окружности и площадь круга.4. Написать программу, которая считывает два целых числа, определяет и печатает, является ли первое число кратным второму.5. Написать программу, которая определяет, является введенное число четным или нечетным.6. Написать программу, которая вычисляет и печатает квадрат и куб чисел от 1 до 10.7. Написать программу, которая печатает геометрическую фигуру: прямоугольник, ромб, стрелу:******* * ** * * * *** * * * **** * * * ******** * **8. Написать программу, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера.9. Написать программу, которая читает неотрицательное целое, рассчитывает и печатает его факториал.10. Написать программу, которая суммирует последовательность целых чисел. Предполагается, что первое прочитанное целое число указывает количество целых чисел, которые будут введены, причем программа должна читать только по одному значению в операторе ввода.11. Написать программу, которая подсчитывает и печатает среднее значение нескольких целых чисел. Предполагается, что последняя читаемая величина имеет значение 9999.12. Написать программу, которая находит наименьшее и наибольшее из нескольких чисел. Предполагается, что первое прочитанное число задает количество последующих вводимых чисел.13. Написать программу, которая считает и печатает произведение нечетных целых чисел от 1 до 15.14. Написать программу, которая печатает трафареты (А, В, С, D - см. ниже) один под другим. Необходимо использовать цикл for для генерации трафаретов.* *** *** *** ** ** ***** * * ***А В С DЗадание 2Одномерные массивы [Л.2 на с.67-70], [Л.3 на с.136-139]. Номер задания соответствует порядковому номеру в журнале (по модулю 20).Задание 3Написать программу, которая выводит на консоль геометрическую фигуру: квадрат, прямоугольник или стрелу (в соответствии с вариантом задания):1)******** ** ** ********2)S S S SS $ $ SS $ $ SS S S S3)0 0 0 0 00 00 00 00 0Длина стороны квадрата (сторон прямоугольника / длина стрелки) должны задаваться либо в параметрах командной строки, либо с клавиатуры через консоль после запуска программы.Символы - заполнители (“*”,“ ”…) также должны либо задаваться в параметрах командной строки, либо назначаться по умолчанию в случае, если программа запущена без параметров. То есть программа при запуске должна определять запущена ли она с параметрами. Если нет - то она должна просить пользователя ввести недостающие размеры с клавиатуры, а символы - заполнители назначаться по умолчанию.Программа должна быть реализована внутри метода public static void main(String[] args){//…} с использованием встроенных типов и основных конструкций языка Java.Также должна быть предусмотрена обработка исключений.Факультативно (не обязательно): Организовать вывод фигуры в текстовый файл.В ходе лабораторной работы необходимо отладить написанную дома программу и предъявить работающую программу преподавателю.Содержание отчетаОтчет должен содержать:Постановку задачи, решаемой отлаженной программой.Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.Листинг программы с необходимыми комментариями.Контрольные вопросы1. Какие условные операторы есть в языке Java?2. Какие операторы цикла существуют в языке Java?3. В чем отличие между операторами цикла for, while и do-while? Какой синтаксис у этих операторов?4. Как реализовать оператор goto c помощью стандартных операторов Java?5. Почему в блоке switch(){} оператор default ставится в конце.6. Как уменьшить размер блока оператора switch(){} в данной работе.7. Какие операции существуют в языке Java? 8. Для чего необходимы операторы условного перехода? Какие операторы условного перехода есть в языке Java? ЛитератураАрнолд К., Гослинг Дж., Холмс Д. Язык программирования Java:Пер. с англ. - М.: Издательский дом «Вильямс», 2001 г. - 624 с., ил.Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. -СПб.: Питер, 2002. -240с.Павловская Т.А. С/С++. Программирование на языке высокого уровня -СПб.: Питер, 2002. -464с.Дополнительная1. Официальный сайт Java -- http://java.sun.com/ (есть раздел на русском языке с учебником).2. Java™ 2 SDK, Standard Edition Documentation -- http://java.sun.com/products/jdk/1.5/index.html.3. Джеймс Гослинг, Билл Джой, Гай Стил. Спецификация языка Java (The Java Language Specification -- http://www.javasoft.com/docs/books/jls/). Перевод на русский язык -- http://www.uni-vologda.ac.ru/java/jls/index.html4. Официальный сайт проекта Eclipse -- http://www.eclipse.org/.А также1. Дмитрий Рамодин. Начинаем программировать на языке Java.2. Николай Смирнов. Java 2: Учебное пособие.3. Картузов А. В. Программирование на языке Java.4. Вязовик Н.А. Программирование на Java.5. Алексей Литвинюк. Введение в интегрированную среду разработки Eclipse -- http://lib.juga.ru/article/articleview/174/1/69/.Приложение 1. Встроенные типы данных и основные конструкции языкаКонстанты В языке Java можно записывать константы разных типов в разных видах. Перечислим их.Целые Целые константы можно записывать в трех системах счисления: · в десятичной форме: +5, -7, 12345678; · в восьмеричной форме, начиная с нуля: 027, -0326, 0777; в записи таких констант недопустимы цифры 8 и 9; · в шестнадцатеричной форме, начиная с нуля и латинской буквы х или X: 0xff0a, 0xFC2D, 0x45a8, 0X77FF; здесь строчные и прописные буквы не различаются. Целые константы хранятся в формате типа int.В конце целой константы можно записать букву прописную L или строчную l, тогда константа будет сохраняться в длинном формате типа long: +25L, -0371, OxffL, OXDFDF1.Действительные Действительные константы записываются только в десятичной системе счисления в двух формах: · c фиксированной точкой: 37.25, -128.678967, +27.035; · с плавающей точкой: 2.5е34, -0.345е-25, 37.2Е+4; можно писать строчную или прописную латинскую букву Е; пробелы и скобки недопустимы. В конце действительной константы можно поставить букву F или f, тогда константа будет сохраняться в формате типа float: 3.5f, -45.67F, 4.7e-5f. Можно приписать и букву D (или d): 0.045D, -456.77889d, означающую тип double, но это излишне, поскольку действительные константы и так хранятся в формате типа double.Символы Для записи одиночных символов используются следующие формы. · Печатные символы можно записать в апострофах: 'а', 'N', '?'. · Управляющие символы записываются в апострофах с обратной наклонной чертой: o '\n' -- символ перевода строки newline с кодом ASCII 10; o '\r' -- символ возврата каретки CR с кодом 13; o '\f' -- символ перевода страницы FF с кодом 12; o '\b' -- символ возврата на шаг BS с кодом 8; o '\t' -- символ горизонтальной табуляции НТ с кодом 9; o '\\' -- обратная наклонная черта; o '\"' -- кавычка; o '\'' -- апостроф. · Код любого символа с десятичной кодировкой от 0 до 255 можно задать, записав его не более чем тремя цифрами в восьмеричной системе счисления в апострофах после обратной наклонной черты: '\123' -- буква S, '\346' -- буква Ж в кодировке СР1251. · Код любого символа в кодировке Unicode набирается в апострофах после обратной наклонной черты и латинской буквы ц ровно четырьмя шестнад-цатеричными цифрами: '\u0053' -- буква S, '\u0416' -- буква Ж. Символы хранятся в формате типа char.Компилятор и исполняющая система Java работают только с кодировкой Unicode.Строки Строки символов заключаются в кавычки. Управляющие символы и коды записываются в строках точно так же, с обратной наклонной чертой, но без апострофов, и оказывают то же действие. Строки могут располагаться только на одной строке исходного кода, нельзя открывающую кавычку поставить на одной строке, а закрывающую -- на следующей. Например: "Это строка\nс переносом""\"Спартак\" -- Чемпион!"Строки символов нельзя начинать на одной строке исходного кода, а заканчивать на другой.Для строковых констант определена операция сцеплений, обозначаемая плюсом."Сцепление " + "строк" дает в результате строку "Сцепление строк".Чтобы записать длинную строку в виде одной строковой константы, надо после закрывающей кавычки на первой и следующих строках поставить плюс +; тогда компилятор соберет две (или более) строки в одну строковую константу, например: "Одна строковая константа, записанная "+ "на двух строках исходного текста" Также нужно учесть, что Windows 95/98/ME вообще не работает с Unicode, a Windows NT/2000 использует для вывода в окно Command Prompt шрифт Terminal, в котором русские буквы, расположены в начальных кодах Unicode, почему-то в кодировке СР866, и разбросаны по другим сегментам Unicode. Имена Имена (names) переменных, классов, методов и других объектов могут быть простыми (общее название -- идентификаторы (idenifiers)) и составными (qualified names). Идентификаторы в Java составляются из так называемых букв Java (Java letters) и арабских цифр 0--9, причем первым символом идентификатора не может быть цифра. (Действительно, как понять запись 2е3: как число 2000,0 или как имя переменной?) В число букв Java обязательно входят прописные и строчные латинские буквы, знак доллара $ и знак 'подчеркивания _, а так же символы национальных алфавитов. Служебные слова Java, такие как class, void, static, зарезервированы, их нельзя использовать в качестве идентификаторов своих объектов. Составное имя (qualified name) -- это несколько идентификаторов, разделенных точками, без пробелов, например, уже встречавшееся нам имя System.out.println. Примитивные типы данных и операции Все типы исходных данных, встроенные в язык Java, делятся на две группы: примитивные типы (primitive types) и ссылочные типы (reference types). Ссылочные типы делятся на массивы (arrays), классы (classes) и интерфейсы (interfaces). Примитивных типов всего восемь. Их можно разделить на логический (иногда говорят булев) тип boolean и числовые (numeric). К числовым типам относятся целые (integral) и вещественные (floating-point) типы. Целых типов пять: byte, short, int, long, char. Символы можно использовать везде, где используется тип int, поэтому JLS причисляет их к целым типам. Например, их можно использовать в арифметических вычислениях, скажем, можно написать 2 + 'ж', к двойке будет прибавляться кодировка Unicode '\u0416' буквы 'ж'. В десятичной форме это число 1046 и в результате сложения получим 1048. А в записи 2 + "Ж" плюс понимается как сцепление строк, двойка будет преобразована в строку, в результате получится строка "2ж". Вещественных типов два: float и double. На рис. 1 показана иерархия типов данных Java. Поскольку по имени переменной невозможно определить ее тип, все переменные обязательно должны быть описаны перед их использованием. Описание заключается в том, что записывается имя типа, затем, через пробел, список имен переменных, разделенных запятой. Для всех или некоторых переменных можно указать начальные значения после знака равенства, которыми могут служить любые константные выражения того же типа. Описание каждого типа завершается точкой с запятой. В программе может быть сколько угодно описаний каждого типа. Java -- язык со строгой типизацией (strongly typed language). Разберем каждый тип подробнее. Рис. 1. Типы данных языка Java Логический тип Значения логического типа boolean возникают в результате различных сравнений и используются, главным образом, в условных операторах и операторах циклов. Логических значении всего два: true (истина) и false (ложь). Это служебные слова Java. Описание переменных этого типа выглядит так: boolean b = true, bb = false, bool2; Над логическими данными можно выполнять операции присваивания, например, bool2 = true, в том числе и составные с логическими операциями; сравнение на равенство b == bb и на неравенство b != bb, а также логические операции. Логические операции · отрицание (NOT) ! (обозначается восклицательным знаком); · конъюнкция (AND) & (амперсанд);· дизъюнкция (OR) | (вертикальная черта); · исключающее ИЛИ (XOR) ^ (каре).Они выполняются над логическими данными, их результатом будет тоже логическое значение true или false. Про них можно ничего не знать, кроме того, что представлено в табл. 1. Таблица 1. Логические операции
В классе Arrays из пакета java.utii собрано множество методов для работы с массивами. Их можно разделить на четыре группы. Восемнадцать статических методов сортируют массивы с разными типами числовых элементов в порядке возрастания чисел или просто объекты в их естественном порядке. Восемь из них имеют простой вид static void sort(type[] a) где type может быть один из семи примитивных типов byte, short, int, long, char, float, double или тип Object. Восемь методов с теми же типами сортируют часть массива от индекса from включительно до индекса to исключительно: static void sort(type[] a, int from, int to) Оставшиеся два метода сортировки упорядочивают массив или его часть с элементами типа Оbject по правилу, заданному объектом с, реализующим интерфейс Comparator: static void sort(Object[] a, Comparator c) static void sort(Object[] a, int from, int to, Comparator c) После сортировки можно организовать бинарный поиск в массиве одним из девяти статических методов поиска. Восемь методов имеют вид static int binarySearch(type[] a, type element) где type -- один из тех же восьми типов. Девятый метод поиска имеет вид static int binarySearch(Object[] a, Object element, Comparator c). Он отыскивает элемент element в массиве, отсортированном в порядке, заданном объектом с. Методы поиска возвращают индекс найденного элемента массива. Если элемент не найден, то возвращается отрицательное число, означающее индекс, с которым элемент был бы вставлен в массив в заданном порядке, с обратным знаком. Восемнадцать статических методов заполняют массив или часть массива указанным значением value: static void fill(type[], type value) static void fill(type[], int from, int to, type value) где type -- один из восьми примитивных типов или тип Оbject. Наконец, девять статических логических методов сравнивают массивы: static boolean equals(type[] al, type[] a2) где type -- один из восьми примитивных типов или тип Object. Массивы считаются равными, и возвращается true, если они имеют одинаковую длину и равны элементы массивов с одинаковыми индексами. В листинге1 приведен простой пример работы с этими методами. Листинг 1. Применение методов класса Arrays import java.utii.*; class ArraysTest{ public static void main(String[] args){ int[] a = {34, -45, 12, 67, -24, 45, 36, -56}; Arrays.sort(a) ; for (int i = 0; i < a.length; i++) System.out.print (a[i]. + " "); System.out.println(); Arrays.fill(a, Arrays.binarySearch(a, 12), a.length, 0); for (int i = 6; i < a.length; i++) System.out.print(a[i] + " "); System.out.println(); } } Приложение 3. Введение в интегрированную среду разработки EclipseEclipse - это расширяемая, open-source интегрированная среда разработки (IDE, Integrated Development Environment). Этот проект был запущен в ноябре 2001 года, когда IBM выделили исходный код из Websphere Studio Workbench, ценой в 40 миллионов долларов, и сформировали Eclipse Consortium для управления разработкой этого инструмента. Первоначальная цель заключалась в том, чтобы "разработать стабильную, полнофункциональную, промышленную платформу, качества коммерческого продукта, для разработки интегрируемых инструментов". На настоящий момент Eclipse Consortium фокусируется на следующих проектах: 1. The Eclipse Project (http://www.eclipse.org/eclipse/index.html) - ответственен за разработку непосредственно Eclipse IDE (платформу для сборки прочих инструментов Eclipse), Java Development Tools (JDT) и Plug-In Development Environment (PDE), используемую для предоставления возможности расширения самой платформы. 2. The Eclipse Tools Project (http://www.eclipse.org/tools/index.html) - занимается созданием оптимальных инструментальных средств для платформы Eclipse. В текущие подпроекты входят: Cobol IDE, C/C++ IDE, а также инструмент моделирования EMF. 3. The Eclipse Technology Project (http://www.eclipse.org/technology/index.html) - занимается технологическими исследованиями, инкубацией и образованием по части использования платформы Eclipse. Совместно с JDT, платформа Eclipse предоставляют множество различных возможностей, которые вы могли наблюдать в коммерческих IDE: подсветка синтаксиса в редакторе, компиляция кода, отладчик уровня исходного кода с поддержкой "нитей" (threads), навигатор по классам, файловый менеджер и менеджер проектов, интерфейсы для стандартных контролирующих систем исходного кода, таких как, например, CVS и ClearCase. Помимо этого Eclipse содержит ряд уникальных возможностей, например, рефакторинг кода (http://www.refactoring.com/), автоматическое обновление и сборка кода (посредством Update Manager), список задач, поддержка возможности тестирования модулей с помощью JUnit (http://www.junit.org/), а также интеграция с инструментом сборки приложений Jakarta Ant (http://jakarta.apache.org/ant/index.html). Несмотря на большое количество стандартного набора возможностей, Eclipse отличается от традиционных IDE по нескольким фундаментальным особенностям. Может быть, самая интересная возможность Eclipse - это абсолютная нейтральность относительно платформы и языка программирования. Вдобавок к эклектичному набору языков программирования, которые поддерживаются Eclipse Consortium (Java, C/C++, Cobol), существует множество сторонних проектов, с помощью которых вы можете обеспечить поддержку интересующего вас языка программирования в Eclipse. На сегодняшний день существуют реализации следующих популярных языков программирования: Python, Eiffel, PHP, Ruby, и C#. Платформа Eclipse предоставляется, благодаря Eclipse Consortium, в виде заранее скомпилированных исполняемых файлов для Windows, Linux, Solaris, HP-UX, AIX, QNX, и Mac OS X. Очень много внимания концентрируется вокруг архитектурной системы plug-in'ов этой платформы, а также "богатых" API (Application Programming Interface), поставляемых с Plug-in Development Environment для расширения Eclipse. Добавить поддержку нового типа редактора, просмотрщика (панели) или языка программирования до безобразия просто, благодаря хорошо спроектированным API и строительным блокам, которые предоставляет Eclipse. Имея приблизительно сотню проектов, по разработке plug-in'ов, имея ресурсы, предоставляемые такими промышленными гигантами, как IBM, HP и Rational (которая недавно была куплена IBM), и дизайн Erich Gamma, который помогает быстро разобраться в процессе разработки - будущему Eclipse предстоит быть весьма ярким, интересным и перспективным. УстановкаБьюсь об заклад, что вы сейчас только и думаете о том, где бы достать копию этого самого Eclipse для вашей платформы и как бы это его установить? :) Первое, о чем вам для начала нужно позаботиться - это убедиться в наличии подходящей, рабочей JRE (Java Runtime Evironment). Хотя Eclipse и создавался в расчете на возможность компиляции кода как для JVM (Java Virtual Machine) версии 1.3, так и для версии 1.4, однако текущие версии Eclipse были спроектированы таким образом, чтобы запускаться на JVM версии 1.3. Если вы не уверены, где можно достать "виртуальную" Java-машину (JVM) для вашей платформы, вы можете найти подробные инструкции и дополнительную информацию об этом на сайте http://www.eclipse.org/. Как только вы убедились в наличии JVM или установили подходящую ее версию, вы готовы к установке Eclipse. Для этого посетите download-раздел сайта проекта Eclipse (http://www.eclipse.org/downloads/) и скачайте оттуда последний релиз, собранный специально под используемую вами платформу. Все дистрибутивы представляют собой .zip-архивы. Распакуйте скачанный архив в подходящую директорию и потратьте немного времени на изучение всех файлов, содержащихся в директории readme. Хотите - верьте, хотите - нет, но на этом инсталляция завершена. Если вы правильно установили JVM и корректно распаковали архив с Eclipse - вы можете приступать к процессу первого запуска этой IDE. Все дистрибутивы, содержащие скомпилированную версию платформы, предоставляют программы для запуска, которые располагаются в основной директории: eclipse. Имя этой программы запуска изменяется в зависимости от платформы, под которую вы скачали дистрибутив: eclipse.exe под Windows, eclipse под Solaris, и так далее. При первом запуске приложение Eclipse выполнит некоторые оставшиеся задачи по установке (например, создание workspace-директории для хранения файлов проектов) до того, как приложение окончательно будет готово к работе. ИнтерфейсИтак, когда у вас уже есть установленный и запущенный Eclipse, самое время начать им пользоваться. После того как вы запустили Eclipse, вы должны увидеть приблизительно следующее: Рисунок 1Как вы можете заметить, Eclipse IDE имеет вполне стандартное содержание меню: Рисунок 2Помимо меню, здесь ярко видно сходство панели инструментов и системы закладок с такими же в других средах разработки приложений. Пример приложенияПанели File Navigator, Code Outline и Task List отображены, но на данный момент не содержат никаких данных. Чтобы продолжить знакомство с Eclipse мы создадим простое Swing-приложение программу-калькулятор. Распишем действия по шагам: 1. Выберите пункт меню File->New->Project..., чтобы начать создание вашего первого Java-проекта. В окне "мастера" выберите Java среди предложенных типов проектов из левого списка и Java Project в правом списке, после чего нажмите кнопку Next. Рисунок 32. В качестве имени проекта введите Calculator и продолжите создание проекта, нажав кнопку Next. Рисунок 43. И, наконец, на завершающем этапе "мастер" создания нового проекта дает вам возможность определить директории, где будут храниться файлы исходного кода и class-файлы, определить подпроекты, которые могут быть использованы создаваемым нами, текущим проектом, а также любые библиотеки, которые мы предполагаем использовать в своем приложении. Установите переключатель на значение Use source folder contained in the project, после чего нажмите кнопку Create New Folder.... В качестве имени новой директории для хранения исходного кода введите src. Нажмите Yes, когда Eclipse спросит вас о том, изменить ли директорию с собираемым приложением на Calculator/bin. Рисунок 54. Нажмите кнопку Finish, чтобы дать возможность Eclipse завершить создание нового проекта. Как только вы создали новый проект, вы можете заметить, что внешний вид Eclipse несколько изменился (этого и следовало ожидать): панель Outline переместила в другую часть окна, панель Navigator была заменена панелью Package Explorer и т.д. Вот какой вид приняло окно Eclipse после того, как мы создали новый проект:Рисунок 6Такая планировка называется Java Perspective. "Ракурс", в понятии Eclipse, определяет какой-либо сохраненный порядок расположения любого количества различных панелей редактора и просмотрщиков. Eclipse поставляется с рядом "ракурсов" определенных по умолчанию (Resource, Java, Debug и другие), которые могут быть изменены в соответствии с вашими нуждами, или же вы можете создавать свои собственные ракурсы. Ракурсы управляются при помощью элементов меню Window или специальной панели инструментов, которая обычно располагается вдоль левой границы окна Eclipse. Рисунок 7Следующим шагом в создании нашего Java-проекта нужно создать директории, которые будут содержать весь наш исходный код. Для этого переключитесь в ракурс Resource, используя пункт меню Window->Open Perspective->Resource. В панели Navigator разверните узлы дерева структуры папок таким образом, чтобы вы могли видеть узел-папку src. Выделите этот узел, и после выполните пункт меню File->New->Folder. В появившемся диалоговом окне, убедитесь, что директория src выбрана и затем введите в качестве имени новой, в поле Folder Name, имя com. Создавать большое количество папок с помощью диалога New Folder было бы не очень удобно и утомительно. К счастью, Eclipse может предоставить вам возможность самим создавать нужные директории с помощью вашего любимого файлового менеджера: командной строки, Windows Explorer и прочих. Используя один из предложенных методов, создайте в папке com папку devious, а в ней папку calculator. Как только вы создали эти папки, выберите любую папку-узел в панели Navigator и, с помощью элемента меню File->Refresh, обновите содержимое этой панели. Таким образом, Eclipse произведет просмотр файловой системы и обновит панель проекта в соответствии с теми изменениями, что вы внесли (создали новые директории). На этом этапе ваше окно Eclipse должно иметь примерно следующий вид: Рисунок 8И еще одно замечание по поводу создания файлов: на ранних этапах создания проекта, вы, скорее всего, достаточно часто будете запускать свое приложений, создавать новые файлы и папки, добавлять новый код, компилировать, и тестировать свой код снова. Важно помнить, что расположение меню в Eclipse зависит от используемого ракурса. Так, если вы переключаетесь в ракурс Resource, чтобы создать новый файл или папку в панели Navigator, вы обнаружите, что меню Run, например, в корне отличается от меню Run в ракурсе Java. Одно из решений этой часто встречающейся проблемы - это использование меню Windows->Show View с тем, чтобы отобразить панель Navigator в ракурсе Java. Если вас полностью устроит полученный ракурс то, воспользовавшись элементом меню Window->Save Perspective As..., вы сможете сохранить ваши изменения в новом ракурсе, либо переписать существующий ракурс Java. Добавление кодаТеперь, когда у нас есть созданная структура директорий, мы можем начинать добавление исходного кода в наш проект. Мы разделим нашу программу-калькулятор на три класса (файла): CalcModel.java, CalcPanel.java, и Calculator.java. Скачайте .zip-архив с исходным кодом этой программы отсюда http://www.onjava.com/onjava/2002/12/11/examples/calculator.zip. После этого распакуйте этот архив и поместите три упомянутых выше файла в директорию com/devious/calculator. Снова воспользуемся пунктом меню File->Refresh, чтобы обновить содержимое панели Project Manager. Вот, что вы должны увидеть после выполнения этих действий: Рисунок 9CalcPanel.java представляет основу интерфейса пользователя нашего калькулятора. Calculator.java выполняет подготовительные инициализационные функции и запускает GUI (графический интерфейс пользователя). Самая же важная часть нашей программы находится в файле CalcModel.java, который занимается непосредственно реализацией фактической математики нашего калькулятора: реагирование на события, выполнение математических вычислений, обновление отображаемой информации, и т.д. Самый простой способ просмотреть исходный код - это переключиться из ракурса Java в Java Browsing. Для этого используйте Open Perspetive из меню Window или кликните на кнопке Open, которая находится на панели инструментов для работы с ракурсами. В то время как вы перемещаетесь по исходному коду на панели Package Explorer, вы можете заметить, что панель Outline становится ненужной вам на данном этапе. Ее можно на время убрать с экрана, кликнув по крестику в правом углу этой панели. Когда она вам понадобится, вы можете воспользоваться пунктом меню Window->Show View->Outline, чтобы отобразить ее вновь. Рисунок 10Запуск и отладка кодаИтак, вы скачали и установили Eclipse, создали новый Java-проект и добавили необходимые файлы и папки для своего простого приложения. Настало время проверить это приложение в деле, запустив его. Для этого вам нужно установить ракурс Java, чтобы выполнить шаги, которые необходимы для запуска приложения: 1. Из основного меню Run выберите элемент Run... 2. В появившемся диалоге "мастера" запуска, выберите "Java Application" из списка Launch Configurations и нажмите кнопку New Рисунок 113. В качестве имени новой конфигурации введите Calculator 4. Нажмите кнопку Search... и выберите основным классом класс Calculator в поле Main class, или просто введите в поле ввода полное имя класса: com.devious.calculator.Calculator. Рисунок 125. Нажмите кнопку Run, чтобы сохранить установленную конфигурацию и запустить приложение. Рисунок 13Создав однажды конфигурацию запуска своего приложения, вы можете запускать его вновь с помощью меню Run->Run History или кнопки Run на панели инструментов. Если вы потратите достаточно времени, "играя" с этим калькулятором, вы обнаружите, что он работает в основном правильно, но только с одном "но": он не хочет правильно выполнять операцию вычитания! Время пустить в ход отладчик исходного кода Eclipse и обнаружить эту злосчастную ошибку. Если вы следовали всем инструкциям, приведенным выше в этой статье, то вы можете запустить это приложение с отладчиком с той же конфигурацией, которую мы определили для обычного запуска. Для этого выберите в меню пункт Run->Debug History->Calculator. Когда вы запускаете свое приложение вместе с отладчиком, Eclipse автоматически переключается в ракурс Debug: Рисунок 14Поскольку, обнаруженная нами, проблема сконцентрирована вокруг функции вычитания, мы установим точку прерывания (breakpoint) в обработчик события для кнопок "-" и "=". Для начала, нам нужно переключиться в закладку редактора класса CalcPanel. (Если у вас нет закладки с исходным кодом этого класса, вам нужно открыть файл с именем CalcPanel.java, предварительно переключившись в ракурс Java или Resource и потом вернуться обратно в ракурс Debug). Воспользуйтесь панелью Outline, чтобы определить местонахождение метода actionPerformed. Переместитесь немного ниже, пока не обнаружите выражение case для знака "-" (строка 126). Если вы выполните двойной клик на левой границе этой строки, Eclipse автоматически установит точку прерывания в ней. Переместитесь немного ниже и установите еще одну точку прерывания на вызове метода model.calculate() в обработчике события кнопки "=" (строка 138). Рисунок 15Теперь переключитесь в окно калькулятора и нажмите несколько кнопок. Например, "2", "4", "6" и "-". Как только отладчик натыкается на точку прерывания, вы можете видеть появившиеся кнопки на панели инструментов Debug, которые служат для пошагового прохождения по исходному коду, причем можно делать шаги по коду и, не заходя внутрь методов, выполнять их автоматически, или же, заходя внутрь, проходиться и по их исходному коду. Рисунок 16Если мы зайдем внутрь метода setOperation(), станет понятно, что он выполняют достаточно тривиальную функцию: сохраняет код операции в поле pendingOp. Теперь нажмите кнопку Resume на панели инструментов Debug, чтобы продолжить выполнение программы. Замечание: Основная ошибка новых пользователей Eclipse в том, что они иногда нажимают кнопки Debug или Run на основной панели инструментов (что приводит к запуску еще одной копии приложения) вместо того, чтобы нажать Resume. Теперь нажмите еще пару кнопок (например, "1", "2", "3") и после этого кнопку "=". Таким образом, мы оказываемся внутри метода calculate(), проблема оказалась очевидна: кто-то скопировал код из варианта OP_ADD, но забыл заменить знак + на -. Проблема решена! :) Исправление ошибки методом HotSwapЕсли для запуска приложения вы использовали JVM версии 1.4, то нам остался всего один завершающий шаг на пути к исправлению этой ошибки в нашем примере. Вместо того, чтобы выходить из программы-калькулятора, вносить изменения в исходный код, компилировать заново весь проект, и только потом запускать новую сессию отладчика, мы можем изменить все "налету". В то время как отладчик все еще запущен, измените в исходном коде строку с: setDisplay(previousValue + currentValue);// на:setDisplay(previousValue - currentValue);Сохраните этот файл, после чего нажмите кнопку Resume, чтобы "отпустить" приложение и продолжить работу с ним. Используя кнопку C, чтобы сбросить его, и повторите действия, которые мы проделали ранее. Теперь все работает, как положено! То, что мы сейчас продемонстрировали - это поддержка Eclipse'ом новой возможности (которая носит название HotSwap) JVM версии 1.4. Теперь Java Platform Debugger Architecture (JPDA) поддерживает возможность замены исходного кода у выполняющегося приложения. Это особенно полезно, когда запуск приложения или нахождение места, где оно "рушится", отнимает много времени. Установка параметров командной строки в IDE Eclipse.Чтобы установить параметры командной строки, надо выбрать меню Run->Run…, затем ввести данные так, как показано на рисунке.Ресурсы· eclipse.org (http://www.eclipse.org/) · Eclipse Project FAQ (http://www.eclipse.org/eclipse/faq/eclipse-faq.html) · Eclipse Platform Technical Overview (http://www.eclipse.org/whitepapers/eclipse-overview.pdf) Приложение 4. Листинг программы, подсчитывающей , как долго нужно откладывать деньги, чтобы к выходу на пенсию накопить заданную сумму, при условии, что ежегодно откладывается одна и та же сумма и размер счета возрастает в соответствии с процентной ставкойJavaimport javax.swing.*;public class Retirement {public static void main(String[] args) {// чтение входных данныхString input = JOptionPane.showInputDialog("Сколько денег вам нужно для пенсии?");double goal = Double.parseDouble(input);input = JOptionPane.showInputDialog("Каков объем вашего ежегодного взноса?"); double payment = Double.parseDouble(input);input = JOptionPane.showInputDialog("Процентная ставка, %:?"); double interestRate = Double.parseDouble(input);// Обновлять баланс счета, пока не накопится нужная суммаdouble balance = 0;int years = 0;while (balance < goal){// Добавить ежегодный взнос и процентbalance += payment; double interest = balance*interestRate/100;balance += interest;years++;}System.out.println("Можете идти на пенсию через "+ years + "лет");System.exit(0);} }Приложение 5. Листинг программы, иллюстрирующей работу с одномерными массивами (создание и сортировка массива)import java.util.*;import javax.swing.*;public class Lottery { public static void main(String[] args){String input = JOptionPane.showInputDialog("Сколько номеров нужно угадать?");int k = Integer.parseInt(input);input = JOptionPane.showInputDialog("Чему равен наибольший из возможных номеров?");int n = Integer.parseInt(input);// Заполняем массив числами 1..nint[] numbers = new int[n];for (int i = 0; i< numbers.length; i++)numbers[i] = i+1;// Генерируем k чисел и помещаем их во второй массивint[] result = new int[k];for (int i = 0; i< result.length; i++){// Генерируем случайный индекс от 0 до n -1int r = (int)(Math.random()*n);// Помещаем элемент в случайную ячейкуresult[i] = numbers[r];// Перемещаем последний элемент в случайную ячейкуnumbers[r] = numbers[n-1];n--;}// Выводим на печать упорядоченный массивArrays.sort(result);System.out.println("Поставте на следующую комбинацию - не пожалеете!");for (int i = 0; i< result.length; i++)System.out.println(result[i]);System.exit(0);}}Приложение 6. Спецификация класса FigureОбязательная часть.import java.io.*;//подключение пакета с классами ввода/выводаpublic class Figure {public static void main(String[] args) {int n;//Например, длина стороны.char outline='*', fill=' '; //Символы, реализующие контур и заливку.//…try{ switch (args.length){ //Размер массива args[] - число слов-аргументов командной строкиcase 1: {n=Integer.parseInt(args[0]);break;} //Преобразвание 1-го слова в intcase 2: {n=Integer.parseInt(args[0]); outline=args[1].charAt(0);break;}//outline-это первый символ 2-го слова командной строки //…case 0: {System.out.println("Введите длину стороны квадрата (размер стрелки и т.д.)");BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//Чтение строки из входного потока:n=Integer.parseInt(br.readLine()); //и преобразование в intbreak;}} //окончание try{}catch(Exception ex){System.out.println(ex.getMessage());System.exit(0); //выход из программы}for (int i=1;i<=n;i++){//… for (int j=1;j<=n;j++){//…} System.out.println(); }} //Конец public static void main(…)} //Конец программы (класса Figure())Необязательная часть (Вывод в файл).try{ File f = new File("d:\\Figure.txt"); //Создаем объект “Файл”. Физически это файл d:\Figure.txt if (!f.exists()) {f.createNewFile();} //Если файл не существует, создаем его.FileWriter fr = new FileWriter(f); //fr-объект класса FileWriter, у которого есть набор методов //для записи в файл. Например, // fr.write(outline) эквивалентно System.out.print(outline)for (int i=1;i<=n;i++){//… for (int j=1;j<=n;j++){//…} fr.write ("\r\n"); //Переход на новую строку }fr.close(); //Поток обязательно надо закрыть!}catch(Exception e){ System.out.println(e.getMessage()); System.exit(0); } |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |