Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab01_2010

.pdf
Скачиваний:
33
Добавлен:
07.06.2015
Размер:
523.66 Кб
Скачать

Лабораторная работа 1. Знакомство с IDE NetBeans

Вместо предисловия

Все лабораторные работы данного курса состоят из «общей» части и индивидуальных заданий. Номер индивидуального задания для каждого студента определяется преподавателем, ведущим занятия.

«Общая» часть содержит не только указания по выполнению работы, но и теоретические сведения, которые потребуются при отчете о выполнении лабораторной работы.

Задания «общей» части обязательны для выполнения. Индивидуальные задания прямо или косвенно основаны на заданиях общей части.

Внимание! Копирование фрагментов кода из текста (особенно если Вы не будете внимательно читать текст) вряд ли приведет к получению работоспособной программы. Разработка программы – итеративный процесс, и в ходе него периодически возникает необходимость изменять уже написанный код (в тексте как раз описано, что, почему и как нужно менять).

Если Вы будете делать «общую» часть шаг за шагом, не пропуская ничего, Вы потратите значительно меньше времени на ее выполнение, нежели пытаясь наугад вставить скопированные строчки. (А еще такой подход очень сильно поможет Вам в выполнении индивидуальных заданий – во что сейчас, разумеется, Вы не верите ).

Чтобы создать новый проект, выберите File | New Project, затем категорию Java и проект

Java Application (см. рис. 1).

Рис. 1. Диалоговое окно New Project (шаг 1)

После этого можно переходить к следующему окну (нажатием кнопки Next, см. рис. 2), в котором нужно определить название Вашего проекта (приложения) и его местоположение.

Рис. 2. Диалоговое окно New Project (шаг 2)

В качестве названия (Project Name) можно использовать любое допустимое имя, но ограничиться при его составлении латинскими буквами, символом подчеркивания и цифрами, например lab_01_gp_01 (gp – от general project) или JavaApplication01. Проектам лучше давать содержательные (отражающие назначение) названия, но для тестового примера это не столь существенно (и можно ограничиться отражением его номера).

По умолчанию среда предлагает сохранять файлы в Ваш профиль на диске C, но следует выбрать в качестве местоположения проекта (Project Location) какую-либо папку на Вашем диске W: (например, создайте папку JavaProjects и в ней подпапку LR01_01). Папка проекта (Project Folder) определяется автоматически, на основании местоположения проекта.

Кроме этих настроек, во втором окне есть еще следующие опции.

Использовать специальную папку для сохраненных библиотек (Use Dedicated Folder for Storing Libraries) – в случае, если несколько Ваших приложений будут использовать одни и те же библиотеки, их можно хранить в отдельной специальной папке (что сэкономит не только место, но и время, если потребуется обновить эти библиотеки). По умолчанию эта опция отключена, и сейчас она нам не понадобится.

2

Создать главный класс (Create Main Class) – отвечает за то, чтобы в javaприложении (не апплете, о которых будем говорить позже) был класс с методом main() – точкой входа, которая позволит Вашему приложению исполняться. Имя класса можно задать отличное от предлагаемого по умолчанию Main (в данном проекте мы пока оставим его именно таким). По умолчанию эта опция включена, и ее имеет смысл оставлять включенной. Разумеется, можно написать главный класс с точкой входа самостоятельно, но современные среды программирования способны выполнить часть работы за Вас, и от этой возможности обычно не следует отказываться. Впрочем, если Вы планируете во вновь созданный файл скопировать уже готовый код, опцию можно отключить.

Установить в качестве главного проекта (Set as Main Project). В среде NetBeans может быть одновременно открыто несколько проектов. Однако компилироваться и запускаться на выполнение будет только тот, который является главным проектом. Эта опция по умолчанию включена, и, скорее всего, Вам не придется ее отключать.

Теперь можно нажать кнопку Finish, и Вы увидите заготовку класса Main, созданную NetBeans (Возможно, Вы увидите страницу Start Page – можете закрыть ее или просто переключиться на страницу Main.java). Заготовка выглядит следующим образом (если номеров строк на экране нет, выберите в меню View пункт Show Line Numbers):

Имя

файла: Main.java

01

/*

02

* To change this template, choose Tools | Templates

03

* and open the template in the editor.

04

*/

05

 

06

package lab_01_gp_01;

07

 

08

/**

09*

10* @author elena

11*/

12public class Main {

13

14/**

15* @param args the command line arguments

16*/

17public static void main(String[] args) {

18// TODO code application logic here

19}

20

21 }

Обратите внимание, что на вкладке рядом с именем файла (Main.java) может отображаться звездочка – это свидетельствует о том, что после последнего редактирования файл не был сохранен.

Рассмотрим теперь подробно «заготовку». Серым шрифтом (в среде NetBeans, в этом файле – курсивом) выделены комментарии, которые поясняют программу. В заготовке Вы можете увидеть все три вида комментариев, которые допускает Java.

3

Во-первых, это комментарий «до конца строки» (см. строку 18): любой текст после двух слешей до конца строки является комментарием.

Во-вторых, это многострочные комментарии, начинающиеся парой символов /* и заканчивающиеся их «зеркальным отражением» */ (см. строки 01 – 04).

Кроме того, есть еще комментарии для формирования документации на проект. Они также являются многострочными, но, в отличие от предыдущих, начинаются с трех символов: /** (но заканчиваются также */). В таких комментариях можно в определенном формате указывать автора проекта, спецификации функций и другую вспомогательную информацию. Существуют специальные инструменты, способные обрабатывать комментарии такого вида и создавать из них, например, html-файлы. Пока мы не будем пользоваться таким типом комментариев.

В строке 06 указано имя пакета, в который будет помещен Ваш класс (имя пакета, как Вы, вероятно, уже заметили, совпадает с именем проекта).

Затем в строке 12 указано имя класса – Main, который в данный момент содержит единственный метод – main(), способный принимать в качестве параметров массив строк.

Проект № 1. Обработка последовательности чисел

Первое приложение, которое мы разработаем, будет решать следующую задачу. С клавиатуры вводятся N целых чисел, нужно найти их сумму, максимальное среди них, минимальное среди них, а также среднее арифметическое этих чисел, определяемое как сумма всех введенных чисел, деленная на их количество.

Обсудим, как следует действовать. Сначала нужно запросить у пользователя собственно число N – количество целых чисел, которое он планирует ввести. Затем потребуется обеспечить ввод с клавиатуры N целых чисел (пока будем полагать, что пользователь обязательно введет целое положительное число; о проверках пользовательского ввода будем говорить позже). Разумеется, поскольку вопрос о хранении большого (и неизвестного заранее) количества целых чисел еще не обсуждался, определять минимум, максимум, а также суммировать числа надо будет одновременно с их вводом.

Все эти действия будут реализованы в методе main(), который является точкой входа в любом Java-приложении. Все, что написано в методе main(), будет исполнено – в той последовательности, в которой записано.

Конечно, если Ваша программа записывается в десять-пятнадцать строчек, то достаточно одного метода main(), если же она занимает больше места, чаще всего ее удобно разделить на несколько методов или даже несколько классов, в каждом из которых будут собственные методы. Важно то, что эти методы – прямо или косвенно – будут вызваться в методе main().

Писать программу будем небольшими частями, проверяя каждый раз их работоспособность. Представляется, что такой подход наиболее правильный – в случае возникновения ошибки ее проще локализовать и исправить, поскольку каждый раз вносятся относительно небольшие изменения. (Конечно, бывают ошибки, которые проявляются не сразу, находятся с трудом, для исправления требуют изменения всей

4

концепции программы – но в маленьких проектах, которыми Вам предстоит заниматься в ближайшее время, нужно очень постараться, чтобы сделать такую ошибку).

§ 1. Как организовать ввод числа с клавиатуры.

Для этого нам потребуется использовать стандартные потоки ввода и вывода System.in и System.out. Поток System.in по умолчанию связан с клавиатурой, а потом System.out – c дисплеем (т.е. вывод осуществляется на экран). Стандартные методы потока ввода позволяют читать отдельные байты или группы байтов, в то время как нам удобнее было бы читать именно целое число.

Такими методами обладает класс Scanner. Он умеет распознавать целые числа, вещественные числа и строки (т.е. последовательности символов от одного разделителя до другого – например, от пробела до пробела). Этот класс находится в пакете java.util, перед его использованием понадобится импортировать класс из этого пакета.

При создании объекта класса Scanner в качестве параметра ему можно передать в том числе и стандартный поток ввода System.in.

Объявим в методе main() переменную класса Scanner c именем con. Это приведет к сигналу об ошибке: объявление переменной будет подчеркнуто красной волнистой линией, а в поле, где расположены номера строк, на этой строке появится красный кружок с восклицательным знаком и «лампочка», свидетельствующая о наличии подсказки, в чем может состоять ошибка (рис. 3).

Рис. 3. Ошибка при объявлении переменной con

Если Вы наведете курсор мыши на «лампочку», то увидите саму подсказку:

Рис. 4. Подсказка об ошибке

Во-первых, в подсказке указано, что объявление переменной должно завершаться точкой с запятой (';' expected). Во-вторых, среда сообщает, что не находит (cannot find

5

symbol) в Вашей программе (location: class lab_01_gp_01.Main – т.е. в классе Main пакета lab_01_gp_01) объявленного класса Scanner (symbol: class Scanner).

Щелкните один раз мышкой по «лампочке» – и Вы получите описание возможных способов устранения ошибки (рис. 5).

Рис. 5. Возможные способы устранения ошибки

Что же предлагает NetBeans? Первый вариант – добавить предложение импорта для класса Scanner из пакета java.util. Второй вариант – добавить предложение импорта для класса Scanner из другого пакета – com.sun.java_cup.internal.runtime. Третий – создать класс с именем Scanner в пакете lab_01_gp_01.

В нашем случае подходящим является первый вариант. Щелкните мышкой по выделенной строке (первому предложенному средой варианту). В результате Ваш проект будет дополнен предложением импорта класса Scanner (рис. 6) – и получит возможность использовать этот класс.

Рис. 6. Добавленное предложение импорта.

6

Примечание.

Если Вам интересно, что это за пакет com.sun.java_cup.internal.runtime, и какую роль в нем играет Scanner, можете посмотреть эти ссылки:

http://jcs.mobile-utopia.com/jcs/s/package:com.sun.java_cup.internal.runtime http://kickjava.com/src/com/sun/java_cup/internal/runtime/Scanner.java.htm http://www.cs.princeton.edu/~appel/modern/java/CUP/manual.html (Последняя содержит руководство по CUP).

Однако сообщение об ошибке, как можно видеть, по-прежнему остается. Если навести на кружок с восклицательным знаком курсор мыши, будет получена подсказка о том, чем может быть вызвана эта ошибка (рис. 7)

Рис. 7. Среда сообщает, что объявление должно быть завершено точкой с запятой

Заметим, что подсказками среды в большинстве случаев имеет смысл пользоваться. Конечно, в случае нескольких ошибок NetBeans вряд ли «догадается», что именно Вы хотели написать. Поэтому всегда нужно подумать, прежде чем «согласиться» с тем, что предлагает среда.

Можно сейчас завершить объявление переменной, а можно совместить его с инициализацией ее некоторым значением, что мы и сделаем (рис.8), разумеется, завершив объявление точкой с запятой.

Рис. 8. Выделяем память для переменной con, связывая ее со стандартным потоком ввода

Зарезервированное слово new означает выделение памяти под объект класса Scanner. Класс – это лишь «шаблон», «проект» объекта

Вы можете говорить слово «стол», подразумевая под ним предмет мебели с определенными свойствами, и это слово описывает класс объектов. Однако конкретный объект-стол занимает место в пространстве и обладает конкретным набором характеристик – цветом, формой, количеством ножек и т.п. В точности также для конкретного объекта в программе необходимо выделить место в ее «пространстве» – в памяти компьютера.

Запись Scanner(System.in) – это вызов конструктора класса Scanner с параметром System.in. Конструкторы в Java всегда имеют имя, совпадающее с именем класса. В документации по java для каждого класса можно найти список конструкторов, полей,

7

методов со всеми возможными параметрами. Разумеется, типы, количество и порядок параметров, которые фактически передаются в конструктор (или метод) должны совпадать с указанными в документации.

В документации для класса Scanner есть конструктор, принимающий в качестве параметра поток ввода (рис. 9).

Рис. 9. Фрагмент документации для класса Scanner

Примечание.

В локальной сети СамГУ документацию по Java можно найти на диске I (или inf) по адресу

(/mnt/vg1/lv3/vol/inf) /tutorial/books/comps/programming/Java/j2se-6/index.html – в распакованном виде (в круглых скобках указан путь для удаленного доступа по ssh) или же – в заархивированном виде, удобном для «транспортировки» на флешке – в каталоге (/mnt/vg0/lv1/arc/) dev/java/SDKs/sun/j2se/6/jdk-6u18-docs.zip (доступ из локальной сети по \\jupiter\archive – надо набрать это в адресной строке программы Проводник или Мой компьютер).

Там же Вы можете найти и установочные пакеты jdk для различных операционных систем (например, файл jdk-6u18-windows-i586.exe – установочный пакет jdk для 32-разрядных ОС

Windows), а в каталоге (/mnt/vg0/lv1/arc/) dev/java/SDKs/NetBeans/ – установочные пакеты среды NetBeans (также для разных ОС; например, netbeans-6.8-ml-java-windows.exe – для ОС Windows).

И пакет jdk (Java Development Kit), и документация к нему, и среда NetBeans являются свободно распространяемыми, Вы можете скопировать их и установить на свой компьютер.

Подключить документацию к NetBeans можно, выбрав в меню Tools | Java Platform вкладку Javadoc и добавив каталог документации API с помощью кнопки Add ZIP/Folder. Комбинация клавиш Shift F1, когда текстовый курсор находится на имени класса, будет открывать (в отдельной вкладке среды) документацию для этого класса.

Вероятно, Вы обратили внимание, что переменная con подчеркнута серо-зеленой волнистой линией. Это не свидетельство ошибки, но – сообщение среды, на которое тоже следует обращать внимание. Если подвести курсор мыши к переменной con, появится сообщение «Variable con not used» (рис. 10).

Рис. 10. Предупреждение среды о том, что переменная con не используется в приложении

8

В настоящий момент это не должно нас беспокоить – ведь приложения (программы) как такового еще не существует.

Теперь можно объявить целую переменную N (рис. 11) – в ней будет храниться количество чисел, которое введет пользователь. Начальное значения у этой переменной нельзя считать определенным.

Рис. 11. Объявление переменной N

Примечание.

По умолчанию Java инициализирует все числовые значения нулем, а логические – значением false. Иногда это бывает удобно. Однако на первых порах мы будем полагать, что только программист (или пользователь) отвечает за то, чтобы у переменной появилось значение.

Теперь необходимо запросить у пользователя значение N. Для этого можно воспользоваться методом print() стандартного потока вывода System.out, который способен печатать строку, переданную ему в качестве параметра. Чтобы прочитать число, которое будет введено, воспользуемся методом nextInt() класса Scanner. Этот метод не имеет параметров, однако возвращает целочисленное значение, прочитанное из входного потока (рис. 12).

Рис. 12. Запрос и чтение числа N с клавиатуры

Мы предполагаем, что пользователь программы знает, зачем его просят ввести количество чисел – иначе было бы правильно сообщить ему о решаемой задаче более подробно.

Итак, написанный фрагмент программы способен запросить и прочитать число, которое пользователь введет с клавиатуры. Более того, уже можно посмотреть, как это происходит (рис. 13). Сохраните проект (выберите в меню File | Save или File | Save All, воспользуйтесь клавиатурными комбинациями Ctrl + S или Ctrl + Shift + S или нажмите на кнопку с двумя дискетами на панели инструментов) и запустите его на выполнение (в меню – пункт Run | Run Main project, на клавиатуре – F6, на панели инструментов – зеленый треугольник).

9

Рис. 13. Приложение выводит запрос

Щелкните мышкой в панели Output, чтобы появился текстовый курсор, введите любое целое число и нажмите клавишу Enter (на клавиатуре). Появится сообщение об успешном построении (building) приложения и времени, за которое оно произошло (не расстраивайтесь, если у Вас время будет больше, чем приведенное на рисунке) (рис. 14).

Рис. 14. Приложение завершило свою работу

Конечно, с числом, которое пользователь введет с клавиатуры, пока ничего не произойдет – оно просто запишется в переменную N.

Примечание.

Чтобы убедиться, что введенное число действительно стало значением переменной N, можно воспользоваться режимом отладки – меню Debug; интересующиеся могут попробовать уже сейчас, обсуждаться работа с отладчиком будет несколько позже.

Можно попробовать ввести с клавиатуры вместо целого вещественное число, строку или просто нецифровой символ. В этом случае в панели вывода Вы увидите сообщение об ошибке InputMismatchException, означающей, что приложение получило на вход не те данные, которые было готово принять (рис. 15). Заметим, впрочем, что некорректный ввод не повлиял на сообщение об успешном построении приложения (что объяснимо – ведь ошибка не в нем).

10

Соседние файлы в предмете Программирование на Java