close

Вход

Забыли?

вход по аккаунту

?

Akchurin Mirskova Fedorova Programmir na yaz Java

код для вставкиСкачать
Федеральное агентство связи
Государственное образовательное учреждение
высшего профессионального образования
ПОВОЛЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ И ИНФОРМАТИКИ
ЭЛЕКТРОННАЯ
БИБЛИОТЕЧНАЯ СИСТЕМА
Самара
1
Поволжский государственный университет
телекоммуникаций и информатики
Акчурин Э.А.,
Мирскова Е.Е., Фѐдорова Т.А.
Программирование на языке Java
ЛР в ИСР Eclipse или NetBeans
Для студентов направления
«Информатика и вычислительная техника»
Самара
2011
2
Факультет информационных систем и технологий
Кафедра «Информатика и вычислительная техника»
Заведующий - д.т.н., профессор Акчурин Э.А.
Другие материалы по дисциплине Вы найдете на сайте
www.ivt.psati.ru
3
Оглавление
0. Введение ................................................................. 6
0.1. Список литературы ......................................... 6
0.2. Обзор ................................................................ 6
0.3. Основные сведения об ИСР ........................... 7
0.4. Методические указания ................................. 8
1. Java. Первые программы .................................... 10
1.1. Основы ИСР Eclipse ..................................... 10
1.2. Основы ИСР NetBeans.................................. 21
1.3. Hello_Cons ..................................................... 29
1.4. Hello_Appl...................................................... 31
2. Типы в языке Java................................................ 35
2.1. Численные типы ............................................ 35
2.2. Строковые и символьные типы ................... 37
3. Линейные структуры .......................................... 39
3.1. Использование базовых функций ............... 41
3.2. Использование функций Math ..................... 43
4. Структуры с ветвлениями .................................. 45
4.1. Ветвления с инструкцией if ......................... 45
4.2. Выбор switch; case......................................... 47
5. Циклы с неизвестным числом повторений....... 49
5.1. Цикл while...................................................... 49
5.2. Цикл do-while ................................................ 52
6. Циклы с заданным числом повторений ............ 54
6.1. Цикл for .......................................................... 54
6.2. Вложенные циклы for ................................... 56
6.3. Команда break ................................................ 57
6.4. Команда continue ........................................... 59
7. Логические операцииОшибка! Закладка не определена.
8. Массивы ............................................................... 60
8.1. Одномерный массив ..................................... 60
8.2. Матрица ......................................................... 62
9. Файлы ................................................................... 65
9.1. Текстовые файлы .......................................... 65
9.2. Файлы произвольного доступа .................... 68
9.3. Копирование файлов .................................... 70
9.4. Обмен данными между файлами ................ 72
10. Операции со строкамиОшибка! Закладка не определена.
10.1. Сравнение строкОшибка! Закладка не определена.
10.2. Объединение строкОшибка! Закладка не определена.
10.3. Разбиение строкОшибка! Закладка не определена.
11. Исключения ....................................................... 75
12. Списки ................................................................ 76
13. Таблицы .............................................................. 79
4
14. Графика. Рисуем функции ................................ 86
14.1. Текст и график функции в форме ............. 86
5
0. Введение
0.1. Список литературы
1. Иллюстрированный самоучитель по Java. Русский HELP. (http://ruhelp.org)
2. Эккель Б.. Философия Java. Библиотека программиста. 4-е изд. – СПб.: Питер, 2009. – 640 с.
3. Хорстманн К. Java 2. Библиотека профессионала, том 1. Основы. 7-е изд.:
Пер. с англ. - М.: "Вильямс", 2006. - 896 с.
4. Хорстманн К. Java 2. Библиотека профессионала, том 2. Тонкости программирования. Пер. с англ. - М.: "Вильямс", 2002. - 1120 с.
5. Щилдт Г. Холмс Д. Искусство программирования на Java. Пер. с англ. - М.:
"Вильямс", 2005. - 335 с.
6. Арнольд К., Гослинг Д.. Язык программирования Java. Пер. с англ. - СПб.:
Питер , 1997. - 304 с.
7. Монахов В. Язык программирования Java и среда NetBeans, 3-е издание.
БХВ=Петербург, 2011, 704 с.
8. Казарин С., Клишин А. Среда разработки Java- приложений Eclipse - М.,
2008. 77 с.
9. Хемраджани А. Гибкая разработка приложений на Java с помощью Spring,
Hubernate и Eclipse. :Пер. с англ. - М.: "Вильямс", 2008. - 352 с.
0.2. Обзор
Современные средства создания Java-приложений разработаны для различных
платформ: Linux, Solaris, Windows и MacOS. Важнейшее преимущество языка
Java заключается в том, что приложение, написанное на основе данного языка,
является независимым от платформы и архитектуры процессора, который будет
выполнять алгоритм данного приложения.
Главным звеном в данном процессе является виртуальная машина Java — это
специальная программа, которая имеющийся откомпилированный независимый
байт-код преобразует в набор инструкций для конкретного процессора. Программа должна быть предварительно установлена на компьютер, где планируется запуск приложения. Байт-код формируется из кода Java встроенным компилятором
Язык Java является объектно-ориентированным и поставляется с достаточно
объемной библиотекой классов. Библиотеки классов Java значительно упрощают разработку приложений, предоставляя в распоряжение программиста мощные средства решения стандартных задач.
Почти сразу же после появления Java было создано большое количество интегрированных сред разработки (ИСР) программ для этого языка: Eclipse (Eclipse
Foundation), NetBeans (Sun), JBuilder (Inprise), Visual Age (IBM), VisualCafe
(Symantec) и др. Большинство из существующих ИСР приложений сами написаны полностью на Java и имеют развитые средства визуального программирования.
Лабораторный цикл содержит работы по изучению программирования на языке
Java. Можно по выбору использовать две свободные ИСР: Eclipse или
NetBeans.
0.3. Основные сведения об ИСР
Eclipse.
Первоначально Eclipse разрабатывалась фирмой IBM как преемник ИСР от IBM
- VisualAge, в качестве корпоративного стандарта ИСР для разработки на разных языках под платформы IBM. По сведениям IBM проектирование и разработка стоили 40 миллионов долларов. Авторы проекта:
Исходный код был полностью открыт и сделан доступным после того, как
Eclipse был передан для дальнейшего развития независимому от IBM сообществу. Развивается и поддерживается консорциумом Eclipse Foundation, в который входят компании Borland, IBM, Merant,QNX Software Systems, Rational
Software, RedHat, SuSE, и TogetherSoft.
Проект Eclipse Platform. получил распространение в виде открытого исходного
кода согласно Универсальной публичной лицензии (Common Public License).
Основой Eclipse является платформа расширенного клиента (RCP - Rich Client
Platform). В еѐ состав входят:
Ядро платформы (загрузка Eclipse, запуск модулей).
Графический интерфейс пользователя (ГИП - GUI) в вариантах AWT, Swing
и SWT. AWT – устаревший набор компонент.
Swing эмулирует графические компоненты. Он создает очень длинные коды
и работает медленнее SWT, пока поддерживается, но в новых проектах не
употребляется.
SWT использует для графических компонентов функции операционной системы, поэтому работает эффективнее, чем Swing.
JFace (файловые буферы, работа с текстом, текстовые редакторы).
Рабочая среда Eclipse (панели, редакторы, проекции, мастеры).
Гибкость Eclipse обеспечивается за счѐт подключаемых модулей, благодаря чему в ИСР возможна разработка приложений не только на Java, но и на других
языках, таких как C/C++, Perl, Groovy, Ruby, Python, PHP, Erlang, компонентный Паскаль, Zonnon и прочих.
NetBeans.
7
Разработка ИСР NetBeans началась в 1996 г. под названием Xelfi (игра букв на
основе Delphi) в качестве проекта студентов под руководством Романа Станека
по на Факультете Математики и Физики Карлова Университета в Праге.
В 1997г. начат выпуск коммерческих версий ИСР NetBeans до передачи всех
прав на нее корпорации Sun Microsystems в 1999г. В 2000г. Sun открыла исходные коды ИСР NetBeans. Сейчас спонсор этой ИСР – Oracle.
Обе ИСР предназначены для разработки консольных приложений, приложений
для ОС с графическим интерфейсом, DLL и др.
0.4. Методические указания
Цикл может использоваться в лабораторном практикуме по дисциплинам:
"Программирование на языках высокого уровня" (специальность 230105),
"Языки программирования высокого уровня" (специальность 230201),
"Информатика и программирование" (специальность 080801),
"Высокоуровневые методы информатики и программирования" (специальность 080801).
Содержание отчета
Название работы.
Цель работы.
Задание в соответствии с вариантом.
Блок-схема алгоритма в соответствии с номером варианта.
Листинги программы.
Результаты выполнения программы на ПК.
Выбор варианта задания
Номер варианта задания = 1 + последняя цифра номера зачетной книжки. В отдельных работах варианты выбираются по оговоренному правилу.
Сохранение кодов
ИСР для каждого проекта создает несколько файлов. Чтобы файлы разных проектов не перепутывались, следует для каждого проекта создавать свою папку с
именем, отображающим смысл (например, WFormApplHello).
Чтобы файлы разных студентов не перепутывались друг с другом, каждому
студенту следует создавать для своих файлов индивидуальные папки. Рекомендуется иерархия вложенных друг в друга папок:
8
Диск пользователя (устанавливается администратором)
Папка Users (пользователи)
Папка группы (например, PO_31)
Папка студента (например, Ivanov)
Папка проекта (например, Hello_Appl)
Внутри нее файлы проекта.
В дисплейных классах в папке проекта на каждом занятии следует сохранять
файлы проекта (одно задание лабораторной работы – один проект, одна папка).
Рекомендуется при выполнении работы периодически сохранять незавершенные проекты в текущем состоянии, чтобы избежать потерь документов при
сбоях.
Методические указания
МУ в электронном виде доступны студентам на сервере кафедры (только для
чтения). Иерархия папок с документацией следующая:
Диск Method
Папка преподавателя (например, Akchurin)
Папка МУ для дисциплины (например, Java)
Файлы методических указаний к отдельным работам.
Методические указания выложены и в сети Internet на сервере кафедры ИВТ
ПГУТИ с именем www.ivt.psati.ru. Они находятся на Web-странице в папке
«Методические руководства».
Внимание. ИСР для каждого нового проекта использует шаблон, в который
нужно добавить функциональность. ИСР создает перечень доступных пространств имен директивами import по умолчанию.
9
1. Java. Первые программы
Предмет исследования
Активизация интегрированной среды разработки (ИСР).
Структура главного меню и его пункты.
Опции выпадающих меню.
Создание простого Windows приложения.
Создание простого консольного приложения.
Контрольные вопросы
1. Активизация ИСР и выход из среды
2. Окна ИСР.
3. Назначение и содержание главного окна ИСР.
4. Окно Конструктора формы.
5. Окно Редактора кода.
6. Окно инструментов.
7. Главное меню ИСР. Опции пунктов.
8. Отличия проектов Приложение и Консольное приложение.
9. Использование встроенного подсказчика.
10.Создание Windows приложения.
11.Создание консольного приложения.
1.1. Основы ИСР Eclipse
После первого запуска ИСР появляется окно ИСР. Вид окна зависит от типа
проекта. Для каждого проекта пользователь может согласиться с шаблоном по
умолчанию, но может выбрать свое представление, выбрав его из списка Resource perspective в правой части панели инструментов. По умолчанию для пустого проекта выбран шаблон, в котором отображаются:
Строка заголовка с именем ИСР (Resource – Eclipce).
Строка главного меню ИСР.
Панели инструментов для быстрого выполнения часто используемых команд.
Project Explorer (Обозреватель проекта). Окно слева вверху. В нем отображается иерархия компонент проекта. При первом запуске окно пустое.
Outline – окно внешних ссылок. Окно слева внизу.
Рабочее поле проекта. Окно вверху справа.
Окно информационных сообщений с закладками по типам информации.
Расположено справа внизу. В примере закладки следующие: Tasks (задачи),
Properties (свойства), JavaBeans (используется с визуальным редактором
Visual Editor для Java).
Пункты главного меню:
Файл (File). - стандартные операции работы с файлами.
Правка (Edit). - стандартные операции редактирования.
Просмотр (Navigate) - команды выбора компонент проекта для просмотра.
10
Поиск (Search). - стандартные операции поиска.
Проект (Project).
Выполнить (Run). Запуск.
Окна (Windows). Выбор окон для отображения.
Справка (Help). На английском языке.
Для начала работы с проектом нужно его создать. Для этого исполняется команда File=>New. Отображается выпадающее меню для выбора типа проекта.
Выбираем Project. Отображается окно выбора типа проекта. В нем выбираем
Java Project. Это консольное приложение. Отображается окно со свойствами
проекта. В нем должны быть заданы:
Имя проекта (например, MyFirst).
Путь к папке для файлов проекта (например, E:\Eddy\java\Eclipse). Чтобы
выбрать место размещения с помощью браузера нужно снять флаг использования места по умолчанию (Use default location).
11
В итоге генерируется окно проекта, в котором в окне браузера проекта отображаются его компоненты
Исходник (Src). Это файлы проекта..
JRE System Library. Библиотека классов для выбранного проекта. Выбирается автоматически по типу проекта.
12
Появились новые пункты главного меню:
Исходный код (Source) – операции для создания кода проекта. Они позволяют вносить в код проекта фрагмент, определяемый командой в выпадающем
меню
Реорганизатор кода (Refactor) - операции по изменению оформления имеющегося кода программы без изменения ее поведения.
Ниже просмотр команд пункта Source.
Операция
Описание
Toggle Comment
Переключатель. Отображает или скрывает комментарий. Текст комментария не трогается.
Add Block Comment
Добавляет блок комментария для выделенного фрагмента кода.
Remove Block
Удаляет блок комментария для выделенного фрагменComment
та кода.
Generate Element
Добавляет комментарий к выделенному элементу кода.
Comment
Shift Right
Сдвиг вправо. Добавляет уровень иерархии для выделенного фрагмента кода.
Shift Left
Сдвиг влево. Уменьшает уровень иерархии для выделенного фрагмента кода.
Correct Indentation
Корректирует иерархию для выделенного фрагмента
кода.
Format
Форматизация выделенного фрагмента кода.
Format Element
Форматизация выделенного элемента кода.
Add Import
Добавить объявления импорта для выделенного фрагмента кода.
Organize Imports
Коррекция объявлений импорта для выделенного
13
фрагмента кода. Ненужные удаляются.
Sort Members
Сортировка членов типа.
Clean Up
Очистка кода. Удаление лишнего.
Override/Implement
Открывает диалог ―Override Method dialog‖, который
Methods
позволяет перезагрузить или реализовать метод текущего типа.
Generate Getter and
Открывает диалог ―Generate Getters and Setters dialog‖,
Setter
который позволяет перезагрузить или реализовать метод текущего типа.
Generate Delegate Me- Открывает диалог ― Generate Delegate Methods‖, котоthods
рый позволяет создать метод делегата для полей текущего типа.
Generate hashCode()
Открывает методы Generate hashCode() и equals(), что
and equals()
позволяет сгенерировать хэш-код и методы выравнивания хэш-таблиц для текущего типа.
Generate toString()
Открывает диалог ―Generate toString() dialog‖, который
запускает и управляет процессом преобразования текущего типа в строку.
Generate Constructor
Добавляет конструкторы, которые инициализируют
using Fields
поля текущего выделенного типа.
Add Constructor from
Добавляет конструкторы, которые определены в суSuperclass
перклассе.
Surround With
Обрамляет выделенные инструкции шаблоном кода
(пунктирный прямоугольник).
Externalize Strings
Открывает мастера экстернализации строк. Он позволяет заменить все строки в коде, используя инструкции
доступа к файлу свойств.
Find Broken
Поиск разбитых строк экстернализации в выбранном
Externalized Strings
файле свойств.
Ниже просмотр команд пункта Refactor.
Операция
Rename
Move
Change Method Signature
Extract Method
Extract Local Variable
Extract Constant
Описание
Переименование выбранного элемента и всех ссылок на
него.
Удаляет выбранные элементы и все ссылки на них.
Изменяет сигнатуру выделенного метода: имена, типы,
порядок следования параметров, а также обновляет ссылки на них.
Создает новый метод, включающий выделенные инструкции или выражения.
Создает новую переменную, связанную с выделенным
выражением.
Создает статическое поле, связанное с выделенным выражением, и подставляет ссылку не него.
14
Inline
Convert Anonymous
Class to Nested
Move Type to New
File
Convert Local Variable to Field
Extract Superclass
Extract Interface
Use Supertype
Where Possible
Push Down
Локальные переменные, методы и константы в режиме
Inline (на языке ассемблера).
Превращает анонимные классы во вложенные.
Создает новый скомпилированный Java модуль для выбранного типа и обновляет все ссылки на него.
Преобразует локальные переменные в поля.
Создает суперкласс из выделенных типов.
Создает новый интерфейс с множеством методов.
Заменяет появления типа на один из его супертипов там,
где это возможно.
Перемещает множество методов и полей из класса в подкласс.
Pull Up
Перемещает метод или поле из класса в суперкласс.
Extract Class
Заменяет множество полей объектом контейнер.
Introduce Parameter Перемещает множество выделенных параметров в новый
Object
класс и обновляет все вызовы.
Introduce Indirection Создает статический непрямой метод делегирования к
выделенному методу.
Introduce Factory
Создает новый метод Factory, который вызывается выделенным конструктором и возвращает созданный объект.
Introduce Parameter Заменяет выражение со ссылкой на новый параметр метода и обновляет все вызова метода.
Encapsulate Field
Заменяет ссылки на поля, используя методы getter и setter.
Generalize Declared Разрешает использовать выбор супертипа для ссылки на
Type
текущий тип.
Infer Generic Type
Заменяет появления генерических типов параметричеArguments
скими.
Migrate JAR File
Миграция JAR файла проекта в новую версию.
Create Script
Создает сценарий реорганизаций, которые были сделаны
в проекте
Apply Script
Применяет сценарий реорганизаций.
History
Браузер рабочего пространства истории реорганизаций.
Создадим в проекте класс командой File=>New=>Class. Это будет наша программа.
15
Теперь отображается окно со свойствами класса. В нем задаем имя класса First
и флаг задания метода main().
16
Теперь в редакторе кода появился шаблон кода. Окно приобрело имя First.java.
Программа – это класс с именем First. Внутри программы определен главный
метод с именем main(). Исполнение программы начинается с его запуска.
В коде программы по умолчанию вставлены строки:
Java комментария (в парных скобках /** и */). По нему можно автоматически построить справку (Help) к проекту.
Текстового комментария в конце строк (с символами //).
Пустые строки (отображены символами ¤q).
17
В метод main нужно добавлять свой функционал. Добавим команду вывода в
консоль фразы Proba командой
System.out.println (―Proba‖);
При наборе команды используем интерактивный подсказчик. После набора
слова System и точки появится выпадающее меню.
В нем ищем нужное действие. Если его не видно, то набираем следующую букву и ищем снова. Найденный метод выбираем. В качестве аргумента выбранного метода вводим строку ―Proba‖. Если при наборе кода допускается ошибка, то
ошибочный фрагмент кода подчеркивается волнистой линией. При подведении
курсора к месту ошибки во всплывающем окне ошибка описывается
18
При запуске готовой программы файлы проекта должны сохраняться. При первом запуске в окне запуска вы получите возможность установить это по умолчанию. Теперь при любом новом прогоне обновленные файлы будут переписываться в месте размещения.
При прогоне возможен запрос способа прогона. Нужно выбрать Java
Application.
При запуске в окне сообщений автоматически отображается закладка консоли,
где и отображается результат Proba.
19
При больших программах желательно видеть номера строк кода. Если номера
не отображаются, то для активизации нумерации строк нужно кликнуть правой
кнопкой мыши по линейке слева от кода. В выпадающем меню выбрать команду Show Line Number.
20
Это приведет к отображению в редакторе номеров строк.
1.2. Основы ИСР NetBeans
Окно ИСР пустого проекта содержит:
Строку заголовка с именем ИСР.
Главное меню, может быть на русском языке.
Панель инструментов.
Слева окно иерархии решения с вкладками – Проекты, Файлы, Службы.
Справа вверху рабочее поле проекта.
Справа внизу окно для вывода результатов.
Пункты главного меню:
Файл (File) - стандартные операции работы с файлами.
21
Правка (Edit) - стандартные операции редактирования.
Просмотр (Navigate) - команды выбора компонент проекта для просмотра.
Переход.
Исходный код (Source) - команды выбора фрагментов кода..
Реорганизация кода (Refactor) – операции по изменению оформления имеющегося кода программы без изменения ее поведения.
Выполнить (Run). Запуск.
Отладка.
Профиль.
Тeam. Связь с сервером команды разработчиков.
Сервис.
Окна (Windows). Выбор окон для отображения.
Справка (Help). На английском языке.
Для начала работы с проектом нужно его создать. Для этого исполняется команда Файл=>Создать проект. Отображается выпадающее меню для выбора
типа проекта.
В нем нужно выбрать категорию проекта и тип проекта. Выбираем категорию
Java и тип - Приложение Java. Это консольное приложение.
Отображается окно со свойствами проекта. В нем нужно задать:
Имя проекта (например, First).
Расположение проекта (например, E:\Eddy\java\NetBeans).
Установить флаг - Создать главный класс.
Установить флаг - Сделать главным проектом.
22
В итоге генерируется окно проекта, в котором отображаются его компоненты
В окне проекта иерархия First. Содержит автоматически подключенные библиотеки.
В рабочем поле проекта вкладка Main.java с шаблоном кода проекта.
В подключенном окне навигации Main средства просмотра членов класса
Main.
23
Программа – это класс с именем Main. Внутри него определен главный метод с
именем main(). Исполнение программы начинается с его запуска.
В коде программы по умолчанию вставлены строки:
Java комментария (в парных скобках /** и */). По нему можно автоматически построить справку (Help) к проекту.
Текстового комментария в конце строк (с символами //).
Пустые строки для визуального разделения фрагментов кода.
24
В метод main нужно добавлять свой функционал. Добавим команду вывода в
консоль фразы Proba командой
System.out.println (―Proba‖);
При наборе команды используем интерактивный подсказчик. После набора
слова System и точки появится выпадающее меню.
25
В нем ищем нужное действие. Если его не видно, то набираем следующую букву и ищем снова. Найденный метод выбираем. В качестве аргумента выбранного метода вводим строку ―Proba‖. Если при наборе кода допускается ошибка, то
ошибочный фрагмент кода подчеркивается волнистой линией. При подведении
курсора к месту ошибки во всплывающем окне ошибка описывается.
26
Листинг программы
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package first;
/**
*
* @author Костян
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Proba");// Действие
}
}
Внимание. По умолчанию открывающая фигурная скобка тела класса или метода размещается в строке заголовка после сигнатуры. Это ухудшает визуальное восприятие кода, так как скобки пары не размещаются в одном и том же
столбце.
27
Листинг программы (другая иерархия)
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package first;
/**
*
* @author Костян
*/
public class Main
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
System.out.println("Proba");// Действие
}
}
Для прогона программы используем команду Выполнить=>Запустить главный проект. В закладке Вывод отображается результат консольного приложения:
Фраза Proba.
Сообщение о завершении и время исполнения.
28
Внимание!
При запуске готовой программы файлы проекта автоматически сохраняются.
При любом новом прогоне обновленные файлы будут переписываться в месте размещения.
Если Вы переходите к новому проекту, то закройте старый, но не удаляйте
его. При удалении весь проект стирается из места расположения.
При больших программах желательно видеть номера строк кода. Если номера
не отображаются, то для активизации нумерации строк нужно кликнуть правой
кнопкой мыши по линейке слева от кода. В выпадающем меню выбрать команду - Показать номера строк. Это приведет к отображению в редакторе номеров
строк.
1.3. Hello_Cons
Создать проект консольного приложения Hello. Оно должно в символьном режиме выводить в консоль фразу «Hello, World и Россия от <Фамилия студента>».
Варианты к заданию. Индивидуальные данные студента.
Пример. Создать проект консольного приложения Hello. Оно должно в символьном режиме выводить в консоль фразу «Hello, World и Россия от Акчурина». Используем ИСР NetBeans.
Действуя, как в задании 2, создаем проект с именем Hello_cons.
29
В тело программы main добавляем строку вывода в консоль нужной фразы. В
окне Вывод может отображаться результата проекта, использованного до этого
проекта.
Листинг программы
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package hello_cons;
/**
*
* @author Акчурин
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Hello, World и Россия от Акчурина");// Действие
}
}
30
Результат прогона в окне Вывод:
1.4. Hello_Appl
Создать проект Windows приложения Hello. Оно должно в графическом режиме
выводить в окно формы фразу «Hello, World и Россия от <Фамилия студента>».
Варианты к заданию. Индивидуальные данные студента.
Пример. Создать проект Windows приложения Hello. Оно должно в графическом режиме выводить в окно формы фразу «Hello, World и Россия от Акчурина». Используем ИСР NetBeans.
При создании нового проекта из меню командой Файл=>Создать_проект вызывается окно выбора типа проекта. В нем выбираем категорию Java и тип проекта - Настольное приложение Java. В нем поддерживается графический интерфейс пользователя (ГИП) с набором компонент Swing или AWT по выбору.
31
В окне выбираем Настольное приложение Java.
Проекту нужно задать имя (например, Hello_Appl) и расположение (например,
E:\Eddy\java\NetBeans\Hello_Appl).
Генерируется окно проекта.
В графическом приложении ИСР использует два окна:
Исходный код.
Конструктор. В нем отображается форма приложения. Форма конструируется визуально, а исходный код будет формироваться автоматически.
Справа от Конструктора расположено два окна:
Палитра доступных компонент.
Свойства элементов формы. В ней отображаются свойства элемента, выделенного в форме.
При визуальном конструировании формы в палитре нужно выделить компоненту и переместить ее в форму в желаемое место. Используем два компонента:
Кнопка Button, при нажатии которой будет происходить вывод фразы. Ее
имя jButton1.
32
Метка Label, в которую будет выводиться фраза. Имя метки jLabel1.
В окне Свойства для кнопки Button задаем надпись «Нажми меня», а для метки
Label стартовую надпись «Смотри сюда».
Для кнопки задаем отслеживаемое событие. Для этого в выпадающем меню
кнопки выбираем это событие командой События=>Action=>actionPerformed.
Это означает реакцию на приоритетное действие, для кнопки это однократный
щелчок мышью.
В код программы автоматически заносится обработчик события, в код которого нужно задать действие:
jLabel1.setText(―Hello World и Россия от Акчурина‖).
Код очень длинный, он включает действия эмулируемее системно. Его не надо
редактировать.
Фрагмент листинга программы
33
Результаты прогона
34
2. Типы в языке Java
Предмет исследований
Структура программы на языке Java.
Задание констант, переменных.
Типы численных данных и ошибки при преобразованиях типов.
Организация простейшего ввода-вывода данных.
Программа решения задачи в виде консольного приложения.
Контрольные вопросы
1. Алфавит языка Java, операции, идентификаторы.
2. Структура программы.
3. Типы данных в Java. Идентификаторы.
4. Константы. Их объявление. Константные выражения.
5. Переменные. Их объявление.
6. Форматы представления чисел (с фиксированной и плавающей точкой).
7. Целые типы, используемые в Java. Арифметические операции над переменными целых типов.
8. Вещественные типы, используемые в Java.
9. Операции сравнения для целых чисел, используемые в Java.
10.Логические типы данных boolean. Логические операции, используемые в
Java.
11.Приведение типов в Java. Совместимость типов при присвоениях.
12.Символьные типы в Java..
13.Строковые типы в Java.
2.1. Численные типы
Задание. Создать программу взаимных преобразований типов численных данных в соответствии с вариантом. Нужно преобразовывать численные данные из
типа Start в типы Fin1 и Fin2 для вещественных и целых чисел.
Пример. Создать программу преобразования численных данных из типа Start в
типы Fin1, Fin2:
Для вещественных чисел: Start = Double, Fin1 = Float.
Для целых чисел: Start = Int, Fin1 = Short, Fin2 = Long.
35
Блок-схема алгоритма
Для контроля размеров данных в программе используется встроенная функция
тип_данных.size, возвращающая размер аргумента в битах. Каждый раз данные
выводятся в виде значения, размера в битах и типа данных. Числа для наглядности отображаются в формате с фиксированной точкой. Используем ИСР
NetBeans.
Листинг программы
Package chisla;
public static void main(String[] args)
{
final double real_0=123.456789;
final int int_0=1111;
float real_1;
short int_1;
long int_2;
System.out.println("Вещественное число в разных типах\n");
real_1=(float)(real_0);
System.out.println("Значения и размер в битах в разных типах");
System.out.println("real_0="+real_0+":"+Double.SIZE+"bites double");
System.out.println("real_1="+real_1+": "+Float.SIZE+" bites float");
System.out.println("\nЦелое число в разных типах\n");
int_1=(short)(int_0);
int_2=(long)(int_0);
System.out.println("Значения и размер в битах в разных типах");
System.out.println("int_0="+int_0+": "+Integer.SIZE+" bites int");
System.out.println("int_1="+int_1+": "+Short.SIZE+" bites short");
System.out.println("int_2="+int_2+": "+Long.SIZE+" bites long");
}
}
36
В листинге программы объявлены типизированные константы real_0 и int_0 (final), стартовые числа Start. Значение int_0 выбрано таким, чтобы оно умещалось в формате выбранного типа. В листинге также объявлены группы переменных Fin1, Fin2 для каждого вида чисел.
Вывод в консоль
2.2. Строковые и символьные типы
Создать программу взаимных преобразований строковых и символьных типов.
Она должна отображать строку Фамилия студента и добавлять к строке символ
восклицательного знака ( ! ).
Пример. Создать программу для работы со строковыми типами. Она должна
отображать слово World в виде строки и добавлять к строке символ восклицательного знака ( ! ). Используем ИСР NetBeans.
Блок-схема алгоритма
37
Листинг программы
package symbols;
{
public static void main(String[] args)
{
String Str_1="World";
String Str_2;
int Len_1,Len_2;
String MyChar="!";
System.out.println("Работа со строками");
Len_1=Str_1.length();
System.out.print("Str_1="+Str_1+" Длина строки="+Len_1);
System.out.println();
System.out.println("\nДобавим к строке символ !");
Str_2=Str_1+MyChar;
Len_2=Str_2.length();
System.out.print("Str_2="+Str_2+" Длина строки="+Len_2);
System.out.println();
}
}
Вывод в консоль.
38
2.3. Класс Date
Предмет исследований
Использование класса Date.
Разработка алгоритма решения в соответствии с заданием.
Составление программы решения задачи в виде консольного приложения.
Контрольные вопросы
1. Назначение класса Date.
2. Стандарт UT (Universal Time) –универсальное время по атомным часам.
3. Стандарт UTC (Coordinated Universal Time) – координированное универсальное время с дополнительными секундами.
4. Создание объекта Date.
5. Методы объекта Date.
6. Получение компонент объекта Date.
7. Коррекция компонент объекта Date.
Задание. Создать консольное приложение для работы с типом Date. Оно должно вводить дату и время рождения студента, выводить детали этих сведений.
Варианты к заданиям - индивидуальные данные студента.
Пример. О человеке, который родился 24 марта 1940 года. Используем ИСР
NetBeans.
Листинг программы
package cons_date;
import java.util.Date;
public class Main
{
public static void main(String[] args)
{
Date Date1 = new Date(1940,3,24,8,30,40);
System.out.println("Свойства объекта Date1");
System.out.println("Год = " + Date1.getYear());
System.out.println("Месяц = "+Date1.getMonth());
System.out.println("День = "+Date1.getDate());
39
System.out.println("День недели = " + Date1.getDay());
System.out.println("Час = " + Date1.getHours());
System.out.println("Минута = " + Date1.getMinutes());
System.out.println("Секунда = " + Date1.getSeconds());
System.out.println();
System.out.println("Нажмите Enter");
}
}
Результат прогона
40
3. Линейные структуры
Предмет исследований
Запись констант, переменных, стандартных функций.
Правила записи арифметических выражений.
Арифметические операторы присваивания.
Разработка алгоритма решения в соответствии с заданием.
Составление программы решения задачи в виде консольного приложения.
Контрольные вопросы
8. Алфавит языка Java
9. Операции.
10.Идентификаторы.
11.Литералы.
12.Описание констант и переменных.
13.Стандартные функции.
14.Процедуры ввода.
15.Процедуры вывода.
16.Последовательность действий при выполнении оператора присваивания.
17.Приоритетность выполнения операций в выражениях.
3.1. Использование базовых функций
Задание. Вычислить значения переменных в соответствии с вариантами задания. Вывести значения вводимых исходных данных и результаты, сопровождая
их вывод именами выводимых переменных. Задание выполнить в виде консольного приложения.
41
Пример. Используем ИСР NetBeans. Вычислить при x = 2.1, y = 0.59, z = -4.8
значения a и b, используя формулы
Блок-схема алгоритма
42
Листинг программы
package lin_basic;
public class main
{
public static void main(String[] args)
{
double x=2.1, y=0.59, z=-4.8;
double a, b;
a=y*Math.tan(x*x)*Math.tan(x*x)*Math.tan(x*x)+Math.sqrt(z*z/(y*y+x*x));
b=Math.log(y+x*x)+Math.sin(z/y)*Math.sin(z/y);
System.out.println("double a = "+ a ) ;
System.out.println("double b = " + b);
}
}
Вывод в консоль.
3.2. Использование функций Math
Повторить задание 1, используя функцию pow(x,y) , класс Math. Используем
ИСР NetBeans.
Листинг программы
package lin_math;
{
public static void main(String[] args)
{
43
double x=2.1,y=0.59,z=-4.8;
double a, b;
a=y*Math.pow(Math.tan(Math.pow(x,2)),3) +
Math.sqrt((Math.pow(z,2))/(Math.pow(y,2) + Math.pow(x,2)));
b=Math.log(y+Math.pow(x,2)) + Math.pow((Math.sin(z/y)),2);
System.out.println("a = " + a);
System.out.println("b = "+ b ) ;
}
}
Вывод в консоль.
44
4. Структуры с ветвлениями
Предмет исследований:
Полная и сокращенная формы условного оператора if.
Вычислительные процессы с разветвляющейся структурой. Использование
оператора выбора switch… case.
Разработать алгоритмы решения в соответствии с заданием.
Составить программы решения задач.
Контрольные вопросы
1. Какие структуры вычислительных процессов Вы знаете?
2. Как организовать разветвление вычислений?
3. Условная инструкция If (<условие>) <инструкция 1>; else <инструкция 2>.
4. Условная инструкция If (<условие>) <инструкция 1>.
5. Вложенные условные инструкции.
6. Инструкция выбора switch… case.
4.1. Ветвления с инструкцией if
Вычислить значения функции по варианту задания из 3.1Ошибка! Источник
ссылки не найден.. Вывести значения исходных данных и полученные результаты, сопровождая их именами переменных. Значения аргумента взять из указанного диапазона так, чтобы протестировать все ветви программы. Проект –
консольное приложение.
Пример
Вычислить при y=1.3, x=[0.. 2.1] с шагом 0.3 значения функции a. Результат вывести в виде таблицы. Проект – консольное приложение. Используем ИСР
NetBeans.
yx
a
1
cos( yx )
e
yx
при
при
cos( yx )
yx
yx
при
1
1
yx
1
Блок-схема алгоритма представлена на рисунке. Для организации цикла введены следующие переменные: xs - начальное значение, xk - конечное значение, dx
- шаг изменения аргумента x.
45
Листинг программы
package if_else;
public class Main {
public static void main(String[] args) {
double a=0, x=0, xs=0, xk=2.1, dx=0.3, y=1.3; // Переменные типа double
System.out.println("Таблица a(x)");
// Заголовок
for (x=xs; (x<=xk); x=x+dx)
//
Начало
цикла
{
if (y*x < 1)
// Первое ветвление
a = Math.exp(-y*x)*Math.cos(y*x);
else if (y*x == 1)
// Вложенное ветвление
a=Math.cos(y*x+1);
else if (y*x > 1)
// Вложенное ветвление
a = y*x + 1;
System.out.print("x = " + x);
System.out.println(" a = " + a);
}
// конец цикла
}
}
Вывод в консоль.
46
4.2. Выбор switch; case
Вывести сообщения для дней недели с использованием оператора множественного ветвления. Проект – консольное приложение. Используем ИСР NetBeans.
В листинге программы объявлена переменная MyWeek типа «массив строк»,
значениям которой в исполняемой части программы присвоены русскоязычные
имена дней недели. Программа содержит цикл запроса у пользователя номера
дня недели в пределах 1..7. После ввода номера в этом интервале с помощью
оператора выбора switch…case формируется текстовое сообщение о дне недели.
Если пользователь вводит номер 0, работа приложения завершается. Ввод чисел, отличных от 0..7, программа рассматривает как ошибку и просит повторить
ввод числа.
Листинг программы
package switch_case;
import java.io.*;
public class project42
{
public static void main(String[] args) throws IOException
{
String[] MyWeek;
MyWeek=new String[7];
String s=null, str_x; int x;
MyWeek[0]="Понедельник";
MyWeek[1]="Вторник";
MyWeek[2]="Среда";
MyWeek[3]="Четверг";
MyWeek[4]="Пятница";
MyWeek[5]="Суббота";
MyWeek[6]="Воскресенье";
// ввод числа в виде строки с клавиатуры
BufferedReader bReader = new
BufferedReader (new InputStreamReader(System.in));
while (true)
{
47
System.out.println("Введите номер дня недели 1..7, для выхода 0");
str_x = bReader.readLine();
// ввод строки
x = Integer.parseInt(str_x);
// перевод строки в целое число
switch(x)
{
case 0: s="Спасибо, до свидания"; System.out.println(s);
System.exit(0); break;
case 1: s=MyWeek[x-1] + " - день бездельник"; break;
case 2: case 3: case 4: s=MyWeek[x-1]+" - рабочий день"; break;
case 5: s=MyWeek[x-1]+". Уф, завтра отдыхаем!"; break;
case 6: s=MyWeek[x-1]+" - выходной день"; break;
case 7: s=MyWeek[x-1]+" - выходной день, а завтра..."; break;
default: System.out.println("Вы ошиблись, повторите ввод");
continue;
} // конец switch
System.out.println(s);
} // конец цикла
}
}
Вывод в консоль.
48
5. Циклы с неизвестным числом повторений
Предмет исследований
Организация циклов с неизвестным числом повторений.
Инструкции циклов while и do-while.
Вычисление суммы членов бесконечного ряда.
Разработать алгоритмы решения задачи.
Составить программы решения задачи.
Контрольные вопросы
1. Циклический процесс с неизвестным числом повторений.
2. Его отличия от цикла с заданным числом повторений.
3. Инструкции языка Java для организации таких циклов. Их сравнение.
4. Синтаксис инструкции while.
5. Как выполнить группу операторов в цикле while?
6. Синтаксис инструкции do-while.
7. Как выполнить группу операторов в цикле do-while?
8. Прямое вычисление суммы членов бесконечного ряда.
9. Вычисление суммы членов бесконечного ряда по рекуррентной формуле.
10.Условие выхода из цикла при вычислении суммы членов бесконечного ряда.
5.1. Цикл while
Вычислить значение суммы членов бесконечного ряда с заданной точностью Е,
используя инструкции цикла while. На печать вывести значение суммы и число
членов ряда, вошедших в сумму. Проект – консольное приложение. Используем
ИСР NetBeans.
49
Пример. Вычислить значение суммы членов бесконечного ряда
при x = 0.1 с точностью до члена ряда с модулем, меньшим E=0.00001.
Для вычисления очередного члена ряда будем использовать рекуррентное соотношение, связывающее его с предыдущим членом a(n+1) = q*a(n). Применение рекуррентных формул позволяет избежать вычисления факториала и возведения в произвольную степень. Рекуррентный коэффициент q найдем из выражений для текущего и следующего членов ряда
Деля второе выражение на первое, получим
Значение начального члена ряда задаем до цикла путем прямого присваивания
(номер начального члена n в разных вариантах равен 0 или 1, правильное значение определяется по формуле текущего члена). В нашем задании n=0, a=x.
Листинг программы
package whilepkg;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
50
public class main
{
static double a, e, q, s, x;
static int n=0;
static String se, sx;
public static void main(String[] args) throws IOException
{
// ввод вещ. переменных c клавиатуры
BufferedReader bReader = new
BufferedReader (new InputStreamReader(System.in));
System.out.println("Введите точность");
se = bReader.readLine();
e = Double.parseDouble(se);
System.out.println("Введите аргумент");
sx = bReader.readLine();
x=Double.parseDouble(sx);
a=x;
s=a;
while (Math.abs(a)>e)
{
q=-x*x/(2*n+2)/(2*n+3);
a=a*q;
s=s+a;
n=n+1;
}
System.out.println("результат \n Сумма s= "+s);
System.out.println(" Число членов ряда n= "+n);
}
}
Вывод в консоль.
51
5.2. Цикл do-while
Выполнить ту же задачу с применением инструкции цикла do-while. Проект –
консольное приложение.
Пример. Используем ИСР NetBeans.
Листинг программы
package do_while;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main
{
static double a, e, q, s, x;
static int n=0;
static String se, sx;
public static void main(String[] args) throws IOException
{
// ввод вещ. переменных c клавиатуры
BufferedReader bReader = new
BufferedReader (new InputStreamReader(System.in));
System.out.println("Введите точность");
se = bReader.readLine();
e = Double.parseDouble(se);
System.out.println("Введите аргумент");
sx = bReader.readLine();
x=Double.parseDouble(sx);
a=x;
s=a;
do
{
q=-x*x/(2*n+2)/(2*n+3);
a=a*q;
s=s+a;
n=n+1;
}
while (Math.abs(a)>e);
System.out.println("результат \n Сумма s= "+s);
System.out.println(" Число членов ряда n= "+n);
}
}
Вывод в консоль.
52
Результат работы программы такой же, как для задания 1.
53
6. Циклы с заданным числом повторений
Подготовка к работе
Организация циклов с известным числом повторений.
Инкрементная и декрементная инструкции цикла for.
Разработать алгоритмы решения задач.
Составить программы решения задач.
Контрольные вопросы
1. Преимущества использования инструкций циклов в программе.
2. Инкрементная инструкция цикла for.
3. Декрементная инструкция цикла for.
4. Разница между инкрементной и декрементной инструкциями цикла for.
5. Требования к переменной цикла в инструкциях for.
6. Организация вычисления суммы.
7. Организация вычисления произведения.
6.1. Цикл for
Вычислить значения функции Задача 1 с использованием инструкции цикла for.
Проект – консольное приложение.
Пример. Вычислить значения функции с использованием инструкции цикла
for. Проект – консольное приложение. Используем ИСР NetBeans.
20
x2 /i
z
i 1
Блок-схема алгоритма
54
Листинг программы
Package forpkg;
import java.io.*;
import java.text.NumberFormat;
public class main
{
public static void main(String[] args) throws IOException
{
double x,z;
int i;
String str_x;
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader (new InputStreamReader(System.in));
// ограничение для вещественных чисел
// количества выводимых знаков после запятой (5 цифр)
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(5);
System.out.println("Введите х");
str_x = br.readLine();
x=Double.parseDouble(str_x);
// обнуление суммы
z=0;
// вычисление суммы (z=z+sqr(x)/i)
for (i=1;i<=20;i++) z+=Math.pow(x, 2)/i;
System.out.println("Результат х = "+nf.format(x)+", z = "+nf.format(z));
// вывод результата
System.exit(0);
}
}
Вывод в консоль.
55
6.2. Вложенные циклы for
Вычислить значения функции Задача 2 с использованием вложенных инструкций цикла for. Проект – консольное приложение.
Пример. Используем ИСР NetBeans. Вычислить
В алгоритме для разнообразия один цикл реализован инструкцией for с нарастанием индекса, а другой - инструкцией for с убыванием индекса.
Блок-схема алгоритма
Листинг программы
import java.io.*;
import java.text.NumberFormat;
public class Main
{
public static void main(String[] args) throws IOException
{
double s,t,x;
int i,j;
56
String str_x;
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader (new InputStreamReader(System.in));
// ограничение для вещественных чисел
// количества выводимых знаков после запятой (10 цифр)
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(10);
System.out.println("Введите х");
str_x = br.readLine();
x=Double.parseDouble(str_x);
// инициализация произведения
t=1;
// цикл произведения
for (i=1;i<=10;i++)
{
s=0; // обнуление суммы
for (j=10;j>=1;j--) s+=Math.cos(i*j*x);
// цикл суммы
t*=s; //t=t*s
} // конец for(i)
// вывод результата
System.out.println("Результат \n х = "+nf.format(x)+", t = "+nf.format(t));
// выход из программы
System.exit(0);
}
}
Вывод в консоль.
6.3. Команда break
Создать программу с иcпользованием команды break. Проект – консольное
приложение. В программе ищется первое не простое число из последовательно-
57
сти чисел от N до 1. Варианты заданий – N = две последние цифры номера зачетной книжки.
Пример. Создать программу с иcпользованием команды break. Проект – консольное приложение. В программе ищется первое не простое число из последовательности чисел от i = 8 до 1. Число не простое, если при его делении на целые числа, меньшие его, получается нулевой остаток. Во внешнем цикле перебираются числа делимые от i = 8 до 1. Во внутреннем цикле перебираются делители от j = i -1 до 1. При обнаружении нулевого остатка сбрасывается флаг
простого числа, по которому команда break прекращает итерации, так как ответ
уже найден.
Листинг программы
import java.io.*;
public class Main
{
public static void main(String[] args)
{
for (int i = 10; i > 1; i--)
{
Boolean IsPrimeNumber = true; // устанавливаем флаг простого числа
for (int j = i - 1; j > 1; j--)
{
// если есть делитель с нулевым остатком, сбрасываем флаг
if (i % j == 0)
{
IsPrimeNumber = false;
break;
// дальнейшая проверка бессмысленна
}
}
if (IsPrimeNumber == false)
{
System.out.println("Не простое число " + i);
}
else
{
System.out.println("Простое число " + i);
}
}
}
}
Результат прогона в окне вывода:
run:
Не простое число 10
Не простое число 9
58
Не простое число 8
Простое число 7
Не простое число 6
Простое число 5
Не простое число 4
Простое число 3
Простое число 2
ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 0 секунд)
6.4. Команда continue
Создать программу с использованием команды continue. Проект – консольное
приложение. В программе ищется первое нечетное число из последовательности чисел от N до 1. Варианты заданий – N = две последние цифры номера зачетной книжки.
Пример. В программе ищется первое нечетное число из последовательности
чисел от N до 1. Признак нечетности – остаток от деления на 2 не равен нулю.
Если он равен нулю, то команда continue прерывает текущую итерацию и переходит к следующей.
Листинг программы
import java.io.*;
public class Main
{
public static void main(String[] args)
{
for ( int i = 10; i > 0; i--)
{
if ( i%2 ==0)
{
continue;
}
System.out.println("Нечетное число " + i);
}
}
}
Результат прогона в окне вывода:
run:
Нечетное число 9
Нечетное число 7
Нечетное число 5
Нечетное число 3
Нечетное число 1
ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 0 секунд)
59
7. Массивы
Предмет исследований
Способы описания размеров массивов.
Способы ввода и вывода массивов.
Реализация приемов накопления суммы или произведения элементов массивов, запоминания результатов, нахождения наибольшего и наименьшего.
Способы ввода и вывода матриц.
Разработать алгоритмы решения в соответствии с заданием.
Составить программы решения задач.
Контрольные вопросы
1. Что такое массив?
2. Описание типа - массив.
3. Какие операторы языка можно использовать для описания массивов?
4. Особенности организации цикла при обработке массивов?
5. Особенности программирования при обработке массивов?
6. Особенность ввода и вывода массивов?
7. Метод length.
8. Массив массивов.
7.1. Одномерный массив
Обработка одномерного массива. Проект – консольное приложение.
Пример. Вычислить наибольший элемент Xmax массива Х и его порядковый
номер Nmax. Размерность массива N 30 . Результат консольное приложение.
Используем ИСР NetBeans.
Блок-схема алгоритма
60
Листинг программы
import java.io.*;
public class massiv
{
public static void main(String[] args) throws IOException
{
int NN=30;
int i, xmax, imax, N;
int[] x=new int[NN];
String strNN;
// связь с клавиатурой
BufferedReader bReader = new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Введите размер массива");
strNN = bReader.readLine();
N=Integer.parseInt(strNN);
System.out.println("размер массива="+strNN);
for (i=0;i<N;i++)
{
x[i]=(int)(Math.random()*100);
}
61
xmax=x[0]; imax=0;
for (i=1;i<x.length;i++)
{
if (x[i] > xmax)
{
xmax=x[i];
imax=i;
}
}
System.out.println("Результат");
for (i=0;i<N;i++)
{
System.out.print("x["+(i+1)+"]= "+x[i]+"; ");
}
System.out.println("\nРезультат");
System.out.println("xmax= "+xmax+" imax= "+(imax+1));
}
}
Вывод в консоль.
7.2. Матрица
Обработка матрицы. Проект – консольное приложение
62
Пример. Вывести квадратную матрицу X размером 4x4 в виде таблицы. Найти
максимальное значение элемента и его координаты: номер строки R и номер
столбца C. Используем ИСР NetBeans. Для автоматизации инициализации матрицы применяем методы класса Random.
Листинг программы
package matrix;
import java.util.Random; // Класс Random
public class Main
{
public static void main(String[] args)
{
int r=0,Row=8,c=0,Col=8,Cmax=0,Rmax=0,Mmax=0; // Переменные типа int
Row = 4; // Число строк матрицы, нумерация с 0
Col = 4; // Число столбцов матрицы, нумерация с 0
int [][] M = new int [Row][Col]; // Матрица M[Row,Col] типа int
for (r = 0; r < Row; r++) // Создание матрицы
{
for (c = 0; c < Col; c++)
{
// Генерация случайного целого
Random Rnd = new Random(); // Генератор случайных чисел
M[r][c] = Rnd.nextInt(100); // Случайное целое 0...100 в матрицу
if (M[r][c] > Mmax) // Обнаружение максимума
{
Mmax = M[r][c]; // Значение максимума
Rmax = r;
// Номер строки
Cmax = c;
// Номер столбца
}
}
}
// Выводим результаты
System.out.println("Матрица M[Row,Col] случайных целых чисел");
for (r=0; r<Row; r++)
{
for (c=0; c<Col; c++)
{
System.out.printf("%d ",M[r][c]); // Строка с разделителями
}
System.out.println();
}
System.out.println("Мmax= " + Mmax); // Вывод Mmax
System.out.println("Rmax=" + Rmax); // Вывод Rmax
System.out.println("Cmax= " + Cmax); // Вывод Cmax
}
63
}
Результат прогона:
Внимание. Нумерация с 0.
64
8. Файлы
Предмет исследований
Типы файлов, определенные в Java.
Операции с файлами.
Разработать алгоритмы решения в соответствии с заданием.
Контрольные вопросы
1. Типы файлов, определенные в Java.
2. Процедуры создания, открытия, закрытия файлов.
3. Контроль ошибок работы с файлами
Внимание!
При работе с файлами в консольном приложении нельзя применять в путях к
файлам символов кириллицы.
Рекомендуется вводить строки со смыслом, лучше всего числовые - 1, 2,
3...Imax.
8.1. Текстовые файлы
Создать программу создания и дополнения текстового файла. Сначала создать
текстовый файл из 5 строк и посмотреть его содержимое. Затем добавить в этот
файл произвольные строки и проверить содержимое итогового файла.
Пример. Используем ИСР NetBeans.
Листинг программы
package file_text;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
String FileDir=" "e:\\Eddy\\java\\NetBeans\\File_text\\";
String FilePath,FileName,Temp; //переменные для строк
int i,imax;
long length; //длина файла в байтах
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите имя файла: <имя_файла.расширение>");
FileName=br.readLine();
FilePath=FileDir+FileName;
//путь к файлу
try
{
// класс для потоковой (последовательной) записи данных
// данных стандартных типов в файл
DataOutputStream MyFile = new
DataOutputStream( new FileOutputStream(FilePath));
65
//******************************************//
// Запись в файл строк, вводимых с клавиатуры//
//******************************************//
imax=5;
System.out.println("Введите "+imax+" строк");
for (i=1;i<=imax;i++)
{
System.out.print("Строка "+i+" = ");
Temp=br.readLine(); //чтение строки с клавиатуры
MyFile.writeChars(Temp+"\n");
//запись этой строки в файл
}
MyFile.close();
//закрыть файл
//**********************************//
// Вывод на консоль содержимого файла//
//***********************************//
System.out.println("\nСодержимое файла");
RandomAccessFile fr;
// открыть файл с возможностью только чтения
fr=new RandomAccessFile(FilePath,"r");
fr.seek(0);
//установка на запись с нулевой позицией
Temp="";
i=1;
while (Temp != null)
{
// повторять до конца файла
Temp=fr.readLine(); // чтение строки из файла
System.out.println("Строка "+i+" = " +Temp);
i+=1;
}
fr.close(); //закрыть файл
//************************//
// Добавление строк в файл//
//************************//
RandomAccessFile frw;
//открыть файл с возможностью чтения и записи
frw=new RandomAccessFile(FilePath,"rw");
length=frw.length(); //получение длины файла
frw.seek(0);
//перемещение курсора в начало
// перемещение указателя файла в позицию, на n больше текущей
frw.skipBytes((int)length);
System.out.println("length= "+length);
System.out.println("\nВведите "+imax+" строк");
for (i=imax+1;i<=imax*2;i++)
{
System.out.print("Строка "+i+" = ");
66
Temp=br.readLine();
// чтение строки с клавиатуры
frw.writeChars(Temp+"\n");
// дозаписываем строку в конец файла
}
frw.close(); //закрыть файл
//************************************************//
// Вывод на консоль содержимого дополненного файла //
//************************************************//
System.out.println("\nСодержимое дополненного файла");
RandomAccessFile addfr;
// открыть файл с возможностью только чтения
addfr=new RandomAccessFile(FilePath,"r");
addfr.seek(0); // установка на запись с нулевой позицией
Temp="";
i=1;
while (Temp != null)
{
//повторять до конца файла
Temp=addfr.readLine();
// чтение строки из файла
System.out.println("Строка "+i+" = " +Temp);
i+=1;
}
addfr.close(); // закрыть файл
} // конец try
catch (FileNotFoundException e)
{
System.out.println("Файл "+FilePath+" не найден");
}
}
}
Вывод в консоль.
67
8.2. Файлы произвольного доступа
Создать программу демонстрации произвольного доступа к элементам файла.
Она заносит в файл последовательно числа от N1 до N2. После записи из файла
считываются на дисплей все компоненты.
Пример. Работаем с файлом test.txt. Используем ИСР NetBeans.
Листинг программы
package file_pr_dostup;
import java.io.BufferedReader;
import java.io.DataOutputStream;
68
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
public class Main
{
public static void main(String[] args) throws IOException
{
String FileDir="e:\\Eddy\\java\\NetBeans\\file_pr_dostup\\";
String FilePath,FileName; //переменные для строк
int N1,N2,i,imax,Temp;
String sN1,sN2;
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите имя файла: <имя_файла.расширение>");
FileName=br.readLine();
FilePath=FileDir+FileName;
// путь к файлу
try
{
// класс для потоковой (последовательной) записи
// данных стандартных типов в файл
DataOutputStream MyFile = new
DataOutputStream (new FileOutputStream(FilePath));
System.out.println("Спасибо");
//*******************************//
// Запись в файл чисел от N1 до N2//
//*******************************//
System.out.println("Введите N1");
sN1 = br.readLine();
System.out.println("Введите N2");
sN2 = br.readLine();
// перевод введенной строки в целое число
N1=Integer.parseInt(sN1);
N2=Integer.parseInt(sN2);
imax=N2-N1;
for (i=0;i<=imax;i++)
{
Temp=N1+i;
MyFile.write(Temp); // запись числа в файл
}
MyFile.close(); // закрыть файл
//**********************************//
// Вывод на консоль содержимого файла//
69
//***********************************//
System.out.println("\nКомпоненты файла");
RandomAccessFile fr;
// открыть файл с возможностью только чтения
fr=new RandomAccessFile(FilePath,"r");
for (i=0;i<=imax;i++)
{
fr.seek(i); // установка позиции указателя в файле
Temp=fr.read();
System.out.println("Компонент "+i+" = " +Temp);
}
fr.close(); //закрыть файл
} // конец try
catch (FileNotFoundException e)
{
System.out.println("Файл "+FilePath+" не найден");
}
}
}
Вывод в консоль.
8.3. Копирование файлов
Создать программу для высокоскоростного копирования файла-источника в
файл-приемник. В качестве файла-источника использовать test,txt программы
задания 1, созданный ранее. В качестве файла-приемника определить файл с
70
именем test1,txt. После выполнения нужно проверить, что на диске имеется
файл-приемник того же размера и содержания.
Пример. Работаем с файлом test.txt. Используем ИСР NetBeans.
Листинг программы
package file_bystr_copy;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
String FileDir1="e:\\Eddy\\java\\NetBeans\\file_text\\";
String FileDir2="e:\\Eddy\\java\\NetBeans\\file_bystr_copy\\";
byte[] Buf = new byte [512];
// буфер
String FilePath1=null,FilePath2=null; // пути к файлам
long lengthin,lengthout; // длины файлов в байтах
int buf_len;
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader(new InputStreamReader(System.in));
try
{
FilePath1=FileDir1+"test.txt";
// файл-источник
// класс для потокового (последовательного) чтения
// данных стандартных типов из файла
FilePath2=FileDir2+"test1.txt"; // файл-приемник
//
открыть файл-источник
RandomAccessFile infile;
// открыть файл с возможностью только чтения
infile=new RandomAccessFile(FilePath1,"r");
infile.seek(0);
// перемещение курсора в начало
//
открыть файл-приемник
RandomAccessFile outfile;
// открыть файл с возможностью чтения и записи
outfile=new RandomAccessFile(FilePath1,"rw");
outfile.seek(0);
// перемещение курсора в начало
// создать класс для потоковой записи данных в файл-приемник
DataOutputStream OutFile = new
DataOutputStream( new FileOutputStream(FilePath2));
System.out.println("Файл-источник "+FilePath1);
System.out.println("Файл-приемник "+FilePath2);
System.out.println("\nКопировать?");
System.out.println("Нажмите любую клавишу");
br.readLine();
System.out.println("\nКопирование начато...");
71
lengthin=infile.length();
// копирование содержимого файла-источника в файл-приемник
while (true)
{
buf_len=infile.read(Buf);
if (buf_len < 0) break;
OutFile.write(Buf, 0, buf_len);
}
System.out.println("\nКопирование закончено.");
lengthout=outfile.length();
if (lengthin==lengthout)
System.out.println("\nРазмеры файлов одинаковы.");
infile.close();
outfile.close();
} //end try
catch (FileNotFoundException e)
{
System.out.println("Файл "+FilePath1+" не найден");
System.out.println("Файл "+FilePath2+" не найден");
}
}
}
Вывод в консоль.
8.4. Обмен данными между файлами
Создать программу обмена данными с файлом, использующую прямое обращение к именам файлов. Она заносит в буфер N1 случайных чисел и переносит их
в файл. Затем буфер обнуляется, и из файла возвращаются первые N1-2 числа.
Пример. Создать программу обмена данными с файлом, использующую связь с
файлами без файловых переменных. Она заносит в буфер 6 случайных чисел и
переносит их в файл test.txt (он создается в папке проекта). Затем буфер обнуляется, и из файла возвращаются первые 4 числа. Используем ИСР NetBeans.
72
Листинг программы
package file_obmen;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
final byte Count=6;
byte[] Buffer=new byte [Count];
// буфер
int i,Fact;
String FileDir="e:\\Eddy\\java\\NetBeans\\file_text\\";
String FilePath=null; //путь к файлу
// установка связи с клавиатурой
BufferedReader br=new
BufferedReader(new InputStreamReader(System.in));
try
{
FilePath=FileDir+"MyFile";
// создать класс для потоковой записи
// данных в файл (и создать файл)
DataOutputStream OutFile = new
DataOutputStream( new FileOutputStream(FilePath));
System.out.println("В буфере случайные числа");
for (i=0;i<Count;i++)
{
Buffer[i]=(byte)(Math.random()*100);
System.out.println(" "+Buffer[i]);
OutFile.write(Buffer[i]);
}
Fact=OutFile.size();
System.out.println("В файл записано чисел "+Fact);
System.out.println("Нажмите клавишу Enter");
br.readLine();
System.out.println("Буфер очищается");
for (i=0;i<Count;i++)
{
Buffer[i]=0;
System.out.println(" "+Buffer[i]);
}
System.out.println("Нажмите клавишу Enter");
br.readLine();
RandomAccessFile outfile;
// создать файл с возможностью чтения и записи
outfile=new RandomAccessFile(FilePath,"rw");
outfile.seek(0);
// перемещение курсора в начало файла
73
outfile.read(Buffer, 0, Count-2);
System.out.println("Из файла в буфер прочитаны");
for (i=0;i<Count;i++)
{
System.out.println(" "+Buffer[i]);
}
System.out.println("В буфере ненулевых чисел "+(Fact-2));
outfile.close();
OutFile.close();
} // конец try
catch (FileNotFoundException e)
{
System.out.println("Файл "+FilePath+" не найден");
}
}
}
Окно приложения задания 4 показано далее на рисунке.
74
9. Исключения
Предмет исследований
Класс исключений и их обработка.
Инструкции try, catch, finally.
Разработать алгоритмы решения задач.
Составить программы решения задач.
Контрольные вопросы
1. Что такое исключение?
2. Классы исключений и их свойства.
3. Инструкция try,catch. Назначение, структура и применение.
4. Инструкция try, catch, finally. Назначение, структура и применение.
5. Исключение EZeroDivide.
6. Исключение ERangeError.
7. Как включить отработку исключения ERangeError.
8. Как отключить перехват исключения системой.
Задание. Создать программу, обрабатывающую исключения с использованием
инструкции try… catch…finally. Проект – консольное приложение.
В задании надо рассчитывать массив f [ x ] = 1 / (x – N) при x =0…k.
Варианты заданий
N – последняя цифра номера зачетной книжки плюс 5.
Необходимо отслеживать два исключения:
Деление на 0.
Выход за пределы диапазона.
При работе с программой менять k, чтобы получать разные условия возможного возникновения исключений.
Пример. Вариант задания: f[x] = 1 / (x-5).
Листинг программы
75
10. Списки
Предмет исследований
Определенные в Java типы списков и основные команды, используемые для
работы с ними.
Кнопка Buttjjn.
Надпись Label.
Список ListBox.
Участок текста TextArea.
Комбинированный список GomboBox. Это комбинация простого списка с
однострочным редактором TextField.
Контрольные вопросы
1. Проект Java – Настольное приложение.
2. Средства графического интерфейса пользователя в NetBeans.
3. Платформа Swing.
4. Типы списков, используемых в языке Java, их назначение.
5. Компоненты списков List (список) и GomboBox (комбинированный список)
в ИСР NetBeans. Их назначение и сравнение.
6. Создание в форме компонентов списков.
7. Добавление элемента в конец комбинированного списка.
8. Вставка элемента в любую другую позицию (кроме позиции последнего
элемента) комбинированного списка.
9. Добавление строки в участок текста TextArea.
10.Нумерация элементов списков.
11.Создание обработчика события для компонента.
12.Действие ActionPerformed.
Задание Создать проект работы со списками.
Пример. Создать проект работы со списками. В проекте предусмотреть:
Ввести заголовок программы: NetBeans – Списки.
Инициализацию поля ввода текста.
Добавление строки из поля ввода текста в конец комбинированного списка.
Вставку строки из поля ввода текста в комбинированный список в выделенное место.
Копирование строки из комбинированного списка в выделенном месте в
участок текста TextArea с вставкой команды перехода к новой строке.
Рекомендуемая форма программы:
76
Форма содержит следующие компоненты (во всех именах первый символ – j,
так принято в NetBeans):
Меню формы с полями File, Help. Поле Help удаляем, полю File меняем содержимое на NetBeans – Списки.
jTextArea1 – участок текста..
jLabel1 – надпись для заголовка (Участок текста) компонента jTextArea1.
jCcomboBox1 - комбинированный список.
jLabel2 – метка для заголовка (Поле со списком) компонента JComboBox1.
jLlabel3 – метка для приглашения (Введите текст = >).
jNextField1 – текстовое поле (однострочный редактор для ввода текста). В
него вводится строка текста (по умолчанию – Место для текста).
jLlabel4 – метка для заголовка (Текстовое поле) компонента jTextField1.
jButton1– кнопка "Инициализация". Позволяет в jTextField1 очистить поле
ввода и установить там курсор.
jButton2 – кнопка "Добавить в comboBox" для заполнения компонента
jComboBox1.
jButton3 – кнопка "Вставить в comboBox". Вставляет строку текста в выделенное место в списке.
jButton4 – кнопка "Копировать в TextArea". Копирует в jTextArea1 строку,
выделяемую в jComboBox1 построчно.
Для определения функциональности программы программист создает обработчики событий. Остальной код система делает сама, его не надо редактировать.
Фрагмент листинга программы
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jTextField1.setText("");
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
77
{
jComboBox1.addItem(jTextField1.getText());
jTextField1.setText("");
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{
int pos = jComboBox1.getSelectedIndex();
jComboBox1.insertItemAt(jTextField1.getText(),pos);
jTextField1.setText("");
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt)
{
int pos = jComboBox1.getSelectedIndex();
String str = (String) jComboBox1.getItemAt(pos);
str += "\n"; // Добавить перевод строки
int pos1 = 0;
jTextArea1.insert(str, pos1);
pos1 += 1;
}
При прогоне программы отображается форма. Действия пользователя видны в
форме и комментируются в окне консольного вывода.
78
11. Таблицы
Предмет исследований
Назначение компонентов Label, Button, TextField.
Построение таблицы с помощью DefaultTableColumnModel.
Назначение слушателя.
Как создать код обработчика события.
Контрольные вопросы
1. Код создания слушателя.
2. Назначение компонента кнопка.
3. Назначение компонент метка.
4. Назначение компонента однострочный редактор.
5. Порядок действий для создания слушателя (обработчика события).
Задание. Создать проект ―Таблица конвертации‖ для конвертации рублей России в разные валюты с учетом комиссии. В таблице предусмотреть возможность редактирования содержимого ячеек, добавления и удаления строк и
столбцов.
Пример. Создать таблицу для расчета суммы конвертации рублей России в
доллары СА, евро и фунты стерлингов Великобритании.
Запустить ИСР.
Создать в ней новый проект и класс.
Создать новый фрейм и присвоить ему название «Таблица конвертации».
Добавить компоненты для фрейма: текстовые поля Text1 и Text2, метки Lab1
– Lab3, кнопки But1 и But2, таблицу.
Задать следующие свойства компонент:
Компонент
Надпись
Описание функций
Техt1
Редактирование ячейки
Техt2
Ввод суммы
Lab1
Редактор ячеек
Поясняющая надпись
Lab2
Сумма для конвертации Поясняющая надпись
Lab3
Дата
Текущая дата
But1
Изменить
Принятие изменений
But2
Принять
Принятие суммы и расчет
79
После установок интерфейс проекта примет вид, как показано ниже на рисунке.
Блок-схема алгоритма
Листинг программы
import javax.swing.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
80
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class prg_14_1
{
public static void main(String [] args)
{
// создание нового фрейма
final JFrame frame = new JFrame("Таблица конвертации");
// добавление нового слушателя к фрейму
frame.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
// определение порядка форматирования текущей даты
с помощью класса SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy г.");
Date currentDate = new Date();
final JLabel
Lab1=new JLabel("Редактирование ячейки"),
Lab2=new JLabel("Сумма для конвертации"),
Lab3=new JLabel("По состоянию на "+sdf.format(currentDate));
final JButton
But1 = new JButton("Изменить"),
But2 = new JButton("Принять");
final JTextField
Text1=new JTextField(8),
Text2=new JTextField(8);
// создание таблицы
final DefaultTableColumnModel dtcm = new DefaultTableColumnModel();
TableColumn tc0 = new TableColumn();
tc0.setHeaderValue("Валюта");
dtcm.addColumn(tc0);
//
81
TableColumn tc1 = new TableColumn();
tc1.setHeaderValue("Курс рубля");
dtcm.addColumn(tc1);
TableColumn tc2 = new TableColumn();
tc2.setHeaderValue("Выдача, руб.");
dtcm.addColumn(tc2);
TableColumn tc3 = new TableColumn();
tc3.setHeaderValue("Комиссия, %");
dtcm.addColumn(tc3);
TableColumn tc4 = new TableColumn();
tc4.setHeaderValue("Комиссия, руб.");
dtcm.addColumn(tc4);
TableColumn tc5 = new TableColumn();
tc5.setHeaderValue("Взнос, руб.");
dtcm.addColumn(tc5);
Object[] columnNames =
{
"Валюта",
"Курс рубля",
"Выдача, руб.",
"Комиссия, %",
"Комиссия, руб.",
"Взнос, руб."
};
// заполнение таблицы начальными данными
String[][] data =
{
{"USA", "23", "", "2", "", ""},
{"FST", "50", "", "2", "", ""},
{"EUR", "32", "", "2", "", ""},
};
final JTable Table1=new JTable(data,columnNames);
// разрешить выделить ячейку
Table1.setColumnSelectionAllowed(true);
Table1.setRowSelectionAllowed(true);
// установление ширины столбцов таблицы
Table1.getColumnModel().getColumn(0).setMaxWidth(60);
Table1.getColumnModel().getColumn(1).setMaxWidth(70);
Table1.getColumnModel().getColumn(2).setMaxWidth(80);
Table1.getColumnModel().getColumn(3).setMaxWidth(80);
Table1.getColumnModel().getColumn(4).setMaxWidth(100);
Table1.getColumnModel().getColumn(5).setMaxWidth(90);
final JScrollPane ScrollPane1 = new JScrollPane(Table1);
ScrollPane1.setVisible(true);
ScrollPane1.setSize(300, 200);
82
ScrollPane1.setLocation(50, 50);
// добавление компонентов в форму
panel1.add(Lab1);
panel1.add(Text1);
panel1.add(But1);
panel2.add(Lab3);
panel3.add(Lab2);
panel3.add(Text2);
panel3.add(But2);
panel4.add(ScrollPane1);
// Добавление панелей к фрейму
frame.add(BorderLayout.WEST,panel1);
frame.add(BorderLayout.CENTER,panel2);
frame.add(BorderLayout.EAST,panel3);
frame.add(BorderLayout.SOUTH,panel4);
// добавление границы к панелям
panel1.setBorder(BorderFactory.createTitledBorder("A"));
panel2.setBorder(BorderFactory.createTitledBorder("B"));
panel3.setBorder(BorderFactory.createTitledBorder("C"));
panel4.setBorder(BorderFactory.createTitledBorder("D"));
//*************************************************************//
// кнопка "Изменить"
//*************************************************************//
MouseListener MouseL1 = new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
Object obj;
int column, row;
obj=Text1.getText();
column=Table1.getSelectedColumn();
row=Table1.getSelectedRow();
Table1.setValueAt(obj, row, column);
Text1.setFocusable(true);
};
};
// добавление слушателя (обработчика событий) для кнопки But1
But1.addMouseListener(MouseL1);
//*************************************************************//
// кнопка "Принять"
//*************************************************************//
MouseListener MouseL2 = new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
83
int i;
double sum_konv, komis_proc,kurs_rub, Komis, ResVal;
String str_sum_konv, str_komis_proc, str_kurs_rub;
Object obj2=0.0;
int rowcount=Table1.getRowCount();
// cоздадим обьект класса NumberFomat и вызовем его метод
// setMaximumFractionDigits(), c помощью которого указываем
// для вывода максимум два знака после запятой
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
for (i=0;i<rowcount;i++)
{
if (Table1.getValueAt(i,1) != obj2)
{
// Получаем сумму конвертации из текстового поля
// в виде строки
str_sum_konv=Text2.getText();
// переводим строку в вещественное число
sum_konv=Double.parseDouble(str_sum_konv);
// Получаем значение комиссии в рублях из таблицы
// в виде строки
str_komis_proc=(String) Table1.getValueAt(i,3);
// переводим в вещественное число
komis_proc=Double.parseDouble(str_komis_proc);
// расчет комиссии в рублях
Komis=sum_konv/100*komis_proc;
// запись комиссии в рублях в таблицу
Table1.setValueAt(String.valueOf(nf.format(Komis)),I,4);
// запись суммы взноса (конвертации) в таблицу
Table1.setValueAt(Text2.getText(),i,5);
// определяем курс рубля из таблицы в виде строки
str_kurs_rub=(String) Table1.getValueAt(i,1);
// переводим строку в вещественное число
kurs_rub=Double.parseDouble(str_kurs_rub);
// расчет суммы выдачи
ResVal=(sum_konv-Komis)/kurs_rub;
//запись суммы выдачи в таблицу
Table1.setValueAt(String.valueOf(nf.format(ResVal)),i,2);
};
};
};
};
// добавление слушателя (обработчика событий) для кнопки But2
But2.addMouseListener(MouseL2);
// метод рack(); сообщает Swing - нужно придать компонентам
84
// необходимые размеры для правильного помещения их в форму.
// Другой способ - вызвать setSize(int width, int height).
frame.pack();
// вызов метода setVisible(true) для отображения окна на экране
frame.setVisible(true);
}
}
Окно формы перед завершением программы изображено ниже на рисунке.
85
12. Графика. Рисуем функции
Предмет исследований
Графические средства ИСР Eclipse.
Разработать алгоритмы решения и составить программы решения задач.
Контрольные вопросы
1. AWT.
2. Graphics User Interface – GUI.
3. Библиотека Swing.
4. Отличие между AWT и Swing.
5. Процедура обработки события ActionEvent.
6. Методы drawString() и setPaint.
7. Методы setLayout, setSize, setDefaultCloseOperation.
8. Методы setVisible, setResizable.
9. Методы gr.setColor и gr.drawLine.
12.1. Текст и график функции в форме
Создать программу вывода текста и рисования в форме графиков функций.
Проект – WindowsForm приложение.
Пример. Используем ИСР Eclipse. В программе выполняется построение графика функции y=tg(x).
Создаем Java Visual Class, набираем File-New-Other-Java-AWT-JFrame Visual
Class, получаем:
86
ишем имя Visual Class, устанавливаем соответствующие флаги ,нажимаем на
Finish,получаем:
Листинг программы
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JFrame;
87
public class Frame_Graphic extends JFrame
{
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
public void Sinus(String s)
{
setLayout(null);
setSize(600,300);
setVisible(true);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setResizable(false);
this.setLocation(100, 100);
}
public void paint(Graphics gr)
{
int y; int j=0; int k=0;
gr.setColor(Color.WHITE);
gr.fillRect(0, 0, 600, 300);
gr.setColor(Color.lightGray);
while(j<600)
{
gr.drawLine(j, 0, j, 300);
j+=30;
}
while(k<300)
{
gr.drawLine(0, k, 600, k);
k+=30;
}
gr.setColor(Color.BLACK);
gr.drawLine(300, 0, 300, 300);
gr.drawLine(0, 150, 600, 150);
gr.drawLine(120, 140, 120, 160);
gr.drawLine(480, 140, 480, 160);
gr.drawString("0", 305, 165);
gr.drawString("-"+"\u03c0", 125, 140);
gr.drawString("\u03c0", 485, 140);
gr.setColor(Color.BLUE);
for(double i=0;i<1000;i++){
y=(int)(-50*Math.tan(Math.PI*i/180));
gr.drawLine((int)i-240, y+150, (int)i-240, y+150);
}
gr.dispose();
}
88
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
Frame_Graphic thisClass = new Frame_Graphic();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public Frame_Graphic()
{
super();
initialize();
}
private void initialize()
{
this.setSize(600, 300);
this.setContentPane(getJContentPane());
this.setTitle("Graphic y=tg(x)");
}
private JPanel getJContentPane()
{
if (jContentPane == null)
{
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
}
return jContentPane;
}
После запуска программы получаем:
89
В классе, который производит построение графиков, с использованием двух
циклов происходит построение координатной сетки светло-серым цветом, затем черным цветом строятся оси абсцисс и ординат. Синус и косинус рисуются
по аналогии: вначале вычисляется значение y и методом drawString() рисуется
линия длиной в один пиксель. Координата y вычисляется путем явного преобразования типа double в тип int, полученного в результате выполнения выражения -50*Math.tan(Math.PI*i/180).
90
Документ
Категория
Без категории
Просмотров
0
Размер файла
3 949 Кб
Теги
fedorov, programma, yaz, mirskova, java, akchurin
1/--страниц
Пожаловаться на содержимое документа