
- •Содержание
- •Рабочая учебная программа дисциплины По дисциплине «Java-технологии» специальности
- •5В060200 «Информатика»
- •5. Цель изучения дисциплины
- •6. Задачи изучения дисциплины
- •7. Содержание дисциплины
- •8. Календарно-тематический план изучения дисциплины «Статистика»
- •9. План лекций, практических (семинарских), лабораторных занятий
- •10. График проведения срсп
- •11. График выполнения и сдачи заданий по срс
- •12. Тематика курсовых работ
- •13. Список основной и дополнительной литературы
- •13.1 Основная литература.
- •13.2 Дополнительная литература.
- •(С ключами правильных ответов)
- •4. Что будет выведено на экран, если скомпилировать и запустить следующий код:
- •5. Какой результат работы программы:
- •6. После выполнения какой строки только один объект будет доступен для сборки мусора (Garbage Collection)?
- •7. Какой результат выдаст следующий код?
- •16. Что произойдёт если скомпилировать следующий код?
- •2. Каким будет результат компиляции и выполнения следующего кода?
- •3. Что выведет на экран следующий код ?
- •4. Что произойдет в результате компиляции и выполнения следующей программы?
- •6. Каким будет результат компиляции и выполнения данного кода:
- •7. Что выведет данный код:
- •8. Выберите строки, использование которых в строке 7 не приведет к ошибке компиляции.
- •14. Возникнет ли ошибка компиляции в следующем фрагменте кода:
- •15. Что произойдёт если скомпилировать и выполнить следующий код?
- •16. Что выведет следующий код?
- •17. Сколько объектов будет создано в результате следующей операции:
- •18. Определим такую функцию
- •19. Выберите единственный верный результат компиляции и выполнения кода.
- •20. Сколько денег в кармане у Джека?
- •14.2. Теоретические вопросы для проведения 2 рубежного контроля
- •14.3. Тематика письменных работ (рефераты) для проведения
- •2 Рубежного контроля
- •4. Что будет выведено на экран, если скомпилировать и запустить следующий код:
- •5. Какой результат работы программы:
- •6. После выполнения какой строки только один объект будет доступен для сборки мусора (Garbage Collection)?
- •7. Какой результат выдаст следующий код?
- •16. Что произойдёт если скомпилировать следующий код?
- •22. Каким будет результат компиляции и выполнения следующего кода?
- •23. Что выведет на экран следующий код ?
- •24. Что произойдет в результате компиляции и выполнения следующей программы?
- •26. Каким будет результат компиляции и выполнения данного кода:
- •27. Что выведет данный код:
- •28. Выберите строки, использование которых в строке 7 не приведет к ошибке компиляции.
- •34. Возникнет ли ошибка компиляции в следующем фрагменте кода:
- •35. Что произойдёт если скомпилировать и выполнить следующий код?
- •36. Что выведет следующий код?
- •37. Сколько объектов будет создано в результате следующей операции:
- •38. Определим такую функцию
- •39. Выберите единственный верный результат компиляции и выполнения кода.
- •40. Сколько денег в кармане у Джека?
- •41. Выберите единственный верный результат компиляции и выполнения кода.
- •42. Выберите правильный результат выполнения кода:
- •43. Что напечатает следующий код:
- •44. Что напечатает следующий код:
- •46. Что выдаст следующий код?
- •47. Что будет выведено на экран в результате выполнения следующего кода?
- •48. Что выведется на экран:
- •49. Что произойдет в результате компиляции и выполнения кода:
- •50. Какой будет результат компиляции и выполнения кода?
- •I. Какие буквы напечатает данная программа?
- •15.2 Теоретические вопросы для подготовки к экзамену
- •15.3 Методические указания (рекомендации) по выполнению экзаменационной контрольной работы
- •16. Система оценки знаний студента
- •16.1 Шкала выставления рейтинга студента дневного отделения
- •16.2 Шкала выставления рейтинга студента заочного отделения
- •16.2 Расчет итоговой оценки
- •16.3 Балльно-рейтинговая система оценки учебных достижений студента с переводом в традиционную шкалу оценок
- •5В060200 «Информатика»
- •Лекция 2. Основы объектно-ориентированного программирования
- •Лекция 3. Лексика языка
- •V circle. Get/*commentVRadius();
- •2. Comment
- •4. More comments
- •6. Finish
- •Лекция 4. Типы данных
- •Лекция 5. Имена. Пакеты
- •Import java.Net.Url;
- •Import java.Awt.*;
- •Import Java.Awt.*;
- •Import Java.Awt.*;
- •Interface Mylnterface { }
- •Inti.J.K; long I;
- •Лекция 6. Объявление классов
- •Import first.*;
- •IntgetXo {return х;}
- •7 Public class One {
- •V public class Two {// Единственный конструктор класса Second.
- •Initializer getVo о initializer2 TestO
- •Лекция 7. Преобразование типов
- •Лекция 8. Объектная модель в Java
- •Interface а { intgetValueO;}
- •Interface в {double getValue{);}
- •Лекция 9. Массивы
- •Лекция 10. Операторы и структура кода. Исключения
- •1Ы: {System.Out.Println("Block 1");
- •1.1. Консольные приложения
- •1.2. Выполнение Java-программы
- •1.3. Апплеты. Основные принципы создания
- •1.4. Умножение матрицы на вектор
- •1.5. Вычисление значений дробно-рациональной функции комплексного переменного
- •1.6.Выбор фигуры
- •1.7. Создание заставки
- •Import java.Awt.*;
- •Import java.Awt.*;
- •Import java.Applet.*;
- •Import java.Awt.*;
- •Import java.Math.*;
- •Import java.Applet.*;
- •1.11. Построение изолиний функции двух переменных
- •1.11. Работа с паролем
- •Import java.Applet.*;
- •Import java.Awt.*;
- •1. Методические рекомендации по выполнению заданий
- •2. Форма контроля
- •3. Оценочный балл выполнения задания
- •Задание №1.
- •Задание №3
- •Задание №4
- •Задание №5
- •Задание №6
- •Задание №6
1.2. Выполнение Java-программы
Cначала Java-программа должна быть скомпилирована, а потом выполнена интерпретатором.
Компилятор Java требует, чтобы исходный файл использовал расширение .java.
Для компиляции программы необходимо запустить компилятор javac, указав в параметре командной строки имя исходного файла, например:
c:\java\bin\javac abc1.java
Компилятор javac создает файл с именем abc1.class, который содержит программу в виде байт-кода.
Байт-коды записываются в одном или нескольких файлах, могут храниться во внешней памяти или передаваться по сети. Затем полученные в результате компиляции байт-коды можно выполнять на любом компьютера, имеющем систему, реализующую JVM (Java Virtual Maсhine). При этом не важен ни тип процессора, ни архитектура компьютера.
Все стандартные функции, вызываемые в программе, подключаются к ней только; на этапе выполнения из библиотеки классов JDK (Java Development Kit), а не включаются в байт-коды, то есть осуществляется динамическая компоновка.
После компиляции исходного кода каждый индивидуальный класс помещается в собственный выходной файл, имя которого совпадает с именем этого класса, и расширением .class.
При создании апплетов или приложений на языке Java приходится сталкиваться с исключениями. Исключение - это специальный тип ошибки, создаваемый в случае неправильной работы программы. После того как Java создаст объект-исключение, этот объект посылается прикладной программе; такая операция называется возбуждением исключения. Прикладная программа должна перехватить исключение [2].
Код, который может вызвать исключение, помещается в программный блок try, а код обработки этого исключения располагается в блоке catch.
Если исключение не будет обрабатываться, то появится сообщение об ошибке, указывающее на то место, где в программе может генерироваться исключение.
Для выполнения программы используется интерпретатор с именем java
c:\java\bin\java abc1 1 -5 6
На экране будет выдана следующая информация:
NumOfargs=3
args[0]=1
args[1]=-5
args[2]=6
That number is a double!
x1=3.0, x2=2.0
1.3. Апплеты. Основные принципы создания
Основной нишей языка Java является создание апплетов, работающих на рабочих местах клиентов сети Internet. Апплет можно запускать только в среде броузера. Современные броузеры обладают собственной встроенной виртуальной машиной Java, что позволяет выполнять Java-программы в среде самого броузера. Для отображения апплета необходимо писать небольшой фрагмент кода HTML.
Программы, тесно взаимодействующие с пользователем, воспринимающие сигналы от клавиатуры и мыши, работают в графической среде. Каждое приложение, предназначенное для работы в графической среде, должно создать хотя бы одно окно, в котором будет происходить его работа, и зарегистрировать его в графической оболочке операционной среды, чтобы окно могло взаимодействовать с операционной средой и другими окнами.
Для создания определенного графического интерфейса пользователя требуется предоставить место, на котором он будет отображаться. (В программах с графическим пользовательским интерфейсом все отображаемые элементы, даже текст, рисуется на экране). При написании апплета за эти действия отвечает броузер.
Рассмотрим процесс загрузки из сети Internet и запуска в среде броузера Java-апплета. Обычно апплет представляет собой отдельный файл, расположенный вне Web-страницы, на который создается ссылка на языке HTML внутри этой Web-страницы. Для вставки Java-апплета в Web-страницу существует специальный тег в языке HTML - <applet>, с помощью которого устанавливаются координаты и размеры области апплета, а также могут передаваться определенные параметры из Web-страницы в апплет.
Структурная схема загрузки и запуска апплета выглядит следующим образом:
С Web-сервера в сети Internet передается в Web-броузер другого компьютера HTML-страница. После ее загрузки броузер определяет использование встроенного апплета по наличию тега <applet> в HTML-коде этой страницы. Затем броузер формирует область в Web-странице, отведенную для апплета, после чего осуществляет его загрузку из Web-сервера. По завершении загрузки байт-код апплета передается на выполнение виртуальной машине Java (JVM) броузера. При этом могут быть использованы параметры запуска, если таковые были установлены в теге <applet>. Виртуальная машина Java выполняет полученный байт-код в отведенной тегом <applet> области. В процессе запуска каждый апплет переживает четыре основных состояния, или жизненных цикла, которым соответствуют определенные методы [1]:
init() - данный метод вызывается автоматически при загрузке апплета в Web-страницу. С помощью него удобно выполнять первоначальную установку параметров и инициализацию переменных апплета.
start() - данный метод выполняется по завершении процесса инициализации. Управление ему передается каждый раз при загрузке и перегрузке Web-страницы.
stop() - данный метод вызывается каждый раз, когда пользователь переходит к другой странице. При возвращении к текущей странице управление будет передано методу start().
destroy() - данный метод вызывается перед выходом из апплета. В этом методе обычно выполняют остановку работы потока, закрытие сетевых соединений и соединений с базами данных.
Итак, после загрузки апплета, но перед его выполнением, осуществляется проверка байт-кода этого апплета. В этом случае проверяется корректность соблюдения правил языка Java в расположенных в программе ссылках на методы и переменные. Здесь также выполняется контроль над процессами обращения к памяти компьютера. Другими словами, проверяется тот факт, что программа обращается к своим областям памяти, а доступ к адресам, в которых могут быть расположены процедуры других приложений или операционной системы, запрещается виртуальной машиной Java [1].
Приведем вариант решения уравнения ax2+bx+c=0 с применением апплета. Эскизный проект содержит четыре метки с надписями "Введите а:", "Введите в:", "Введите с:" и "Ответ" соответственно, три текстовых окна и кнопку с надписью "Решить". Результат выводится на экран.
Помещаем вначале программы рис. 1, в котором представлены результаты расчета для уравнения x2 –5x+6=0.
Рис. 1. Результат программы abc2
Лабораторная работа № 2.
Листинг 2. abc2.java - апплетный вариант решения уравнения ax2+bx+c=0.
----------------------------------------------------------------
// Подключение пакетов, содержащих классы
import java.awt.*;//для создания граф. интерфейса
import java.applet.*;//для создания java-апплетов
import java.awt.event.*;//для обработки событий
// Определим класс abc2, расширяющий класс Applet
public class abc2 extends Applet{
//Объявление переменных
TextField t1, t2, t3;
Button b1;
String Sa;
// При инициализации апплета создаем элементы управления
public void init(){
// Устанавливаем абсолютное позиционирование
// компонентов внутри апплета
setLayout(null);
// Установка оранжевого фона для апплета
setBackground(Color.orange);
// Создание метки и текстового поля для коэф. a
//Создание метки
Label l1 = new Label("Введите a: ");
//Установка границ метки
l1.setBounds(20, 20, 180, 20);
// Добавление метки на рабочее поле аплета
add(l1);
// Создание текстового поля для а
t1 = new TextField(10);
//Установка границ текстового поля
t1.setBounds(20, 40, 100, 20);
// Добавление текстового поля на рабочее поле аплета
add(t1);
// Создание метки и текстового поля для коэф. b
Label l2 = new Label("Введите b: ");
l2.setBounds(20, 60, 180, 20);
add(l2);
t2 = new TextField(10);
t2.setBounds(20, 80, 100, 20);
add(t2);
// Создание метки и текстового поля для коэф. с
Label l3 = new Label("Введите c: ");
l3.setBounds(20, 100, 180, 20);
add(l3);
t3 = new TextField(10);
t3.setBounds(20, 120, 100, 20);
add(t3);
// Создание кнопки
b1 = new Button("Решить");
b1.setBounds(20, 170, 160, 20);
add(b1);
}//конец init()
// Метод вывода графики в апплете
public void paint(Graphics g){
// Вывод строк
g.drawString("Ответ: ", 10, 220);
g.drawString(Sa, 90, 220); }
// Обработка реакции на нажатие кнопки Решить
public boolean action(Event evt, Object arg){
if(arg == "Решить"){
// Объявление и инициализация переменных
double a,b,c,d,m,eps = 1e-8; int i;
String s1a="";
String s1=t1.getText();
String s2=t2.getText();
String s3=t3.getText();
a = Double.valueOf(s1).doubleValue();
b = Double.valueOf(s2).doubleValue();
c = Double.valueOf(s3).doubleValue();
// Решение уравнения
if(Math.abs(a)<eps)
if(Math.abs(b)<eps)
if(Math.abs(c)<eps)
s1a="any solution";
else
s1a="no solution";
else
s1a="x1 = x2 = " + (-c/b);
else {
if((d = b*b - 4*a*c)<0){
d=0.5*Math.sqrt(-d)/a; a=-0.5*b/a;
s1a="x1 ="+a+" + i" +d+ ",x2= "+a+" - i"+d;
}
else {
d=0.5*Math.sqrt(d)/a; a=-0.5*b/a;
s1a="x1 = "+(a+d)+", x2 = "+(a-d);
}
}
Sa=s1a;
// Перерисовка окна апплета
repaint();
return true;
}
else
return false;
}
}
Апплет начинается с операторов import. Первый импортирует AWT классы, так как апплеты взаимодействует с пользователем через абстрактный оконный интерфейс, а не через классы консольного ввода/вывода. Второй оператор import импортирует пакет java.applet, который содержит класс Applet. Создаваемый пользователь апплет должен быть подклассом этого класса. Третий оператор подключает библиотеку обработки событий.
С помощью строки объявления abc2 extends Applet сообщается, что класс abc2 наследует все переменные и методы более общего класса Applet. Нужно добавить к нему только нужный код.
С помощью апплета в графическую область Web-браузера можно выводить любую информацию. При перекрытии окна браузера другими окнами или его свертывании в пиктограмму это становится невозможным. Когда окно браузера вновь появляется на экране, апплет должен перерисовать свое содержимое. Это осуществляется с помощью метода repaint().
Доступ к графическому пространству осуществляется с помощью объекта Graphics, который нужно передать в качестве параметра методу paint(). Обычно для вывода строки в графическом режиме используется метод drawString(). Этому методу нужно передать три параметра - строку, которую нужно вывести, и координаты х и у, определяющие позицию начала этой строки.
Большинство пользовательских событий, возникающих в апплете, можно обрабатывать, переопределяя метод action(). Этот метод имеет следующий вид:
public boolean action}(Event evt, Object arg)
Когда пользователь щелкает по одной из кнопок апплета, вызывается метод action(). Так как arg - это тестовая метка нажатой кнопки, то можно определить, какую кнопку выбрал пользователь.
Метод action() возвращает значение false, указывающее системе Java, что событие еще не обработано. Пользователь должен доопределить этот метод в своей прикладной программе.
Апплеты Java выполняются в среде Java-совместимого браузера. Для выполнения апплета в Web-броузере можно записать короткий текстовый файл в формате языка HTML, который содержит тег <applet>.
Вид HTML-файла:
<HTML> <body>
<applet code="abc2.class" width=200 height=60>
</applet>
</body> </HTML>
Для тега <applet> обязательны атрибуты code, width и height. Параметры width и height определяют размеры окна апплета (200 и 60). После создания файла с расширением .html, можно запустить этот файл, что приведет к выполнению апплета.
Укажем последовательность операций, выполняющихся при загрузке апплета.
1. Загружается HTML-файл.
2. Обнаруживается тег <applet>.
3. Файл класса, указанного в <applet>, загружается с сервера.
4. Распознаются и загружаются классы, на которые ссылается класс applet.
5. Класс applet вызывает методы init() и start().
6. Если все происходит нормально, апплет отображается в окне броузера (или вне его, если он использует собственный кадр - frame).
Процедура быстрой разработки апплета включает три шага:
1. Редактирование исходного файла Java.
2. Компиляция программы.
3. Запуск программы просмотра апплетов со спецификацией имени исходного файла апплета в ее аргументе. Встретив в комментарии тег <applet> утилита просмотра выполнит его.
Итак, ключевые моменты создания апплета:
Апплеты не нуждаются в методе main().
Апплеты должны выполняться броузером, поддержающим Java.
Лабораторная работа № 3.
Листинг 3. abc3.java - решение уравнения ax2+bx+c=0 с вводом коэффициентов с консоли
---------------------------------------------------------------
import java.io.*;// подключение библиотеки ввода/вывода
// определим имя класса
class abc3{
// Основной метод для вызова приложения
public static void main(String[] args) {
// Объявление и инициализация переменных
double a=1.0,b=-5.0,c=6.0,d,eps=1e-8;
PrintStream pr=System.out;
InputStream is=System.in;
// Объявление буферизованного потока ввода данных
InputStreamReader dis = new InputStreamReader (is);
String str =new String ();
BufferedReader rred = new BufferedReader(dis);
try {
// Чтение символьного представления коэф. а из потока
str = rred.readLine ();
}
/* Определение ошибки обработки потока в процессе ввода-вывода */
catch (IOException e) {;};
Double A = new Double (str);
// a = A.doubleValue ();
// Чтение символьного представления коэф. В и обработка исключения IOException
//в случае возбуждения ошибки ввода
try {str = rred.readLine ();}
catch (IOException e) {;};
Double B = new Double (str);
// Чтение символьного представления коэф. С и обработка исключения IOException
//в случае возбуждения ошибки ввода
try {str =rred.readLine ();}
catch (IOException e) {;};
Double C = new Double(str);
// Преобразование объектов А, В и С в простой тип double
a = A.doubleValue ();
b = B.doubleValue ();
c = C.doubleValue ();
// Решение уравнения
if (Math.abs(a)<eps)
if (Math.abs(b)<eps)
if (Math.abs(c)<eps)
pr.println("any solution");
else
pr.println("no solution");
else
pr.println("x1 =x2 "+(-c/b));
else{
if((d=b*b-4*a*c)<0.01){
d=0.5*Math.sqrt(-d)/a;a=-0.5*b/a;
pr.println("x1= "+a+" +i "+d+
", x2= "+a+" -i "+d);
}else{
d=0.5*Math.sqrt(d)/a; a=-0.5*b/a;
pr.println("x1= "+(a+d)+", x2= "+(a-d));
}
}
}
}
После трансляции и получения файла abc3.class, его нужно запустить и ввести три числа, например, 1 –5 6, вводя каждое число с новой строки (т.е. нажимая после ввода числа на клавишу Enter). Тогда на экране будет получен следующий результат:
X1= 3.0, x2= 2.0
Лабораторная работа № 4.
Листинг 4 Abcfile.java - решение уравнения ax2+bx+c=0 с вводом данных из файла
----------------------------------------------------------------
import java.io.*; // подключаем библиотеку ввода/вывода
import java.math.*; // математическая библиотека
public class Abcfile {
// Метод, читающий вещественные числа.
// Создает исключение, если не удалось прочитать число.
private static double readDouble(StreamTokenizer st) throws Exception
{
// читаем следующую лексему из файла
st.nextToken();
// если не удалось прочитать число - создаем исключение
if (st.ttype != st.TT_NUMBER)
throw new Exception();
// возвращаем прочитанное число
return st.nval;
}
public static void main(String[] args) {
try
{
// Открываем поток для чтения из файла
DataInputStream dis = new DataInputStream(new FileInputStream(args[0]));
// инициализируем символьный поток
Reader r = new BufferedReader(new InputStreamReader(dis));
// создаем объект, разбирающий числа в открытом потоке
StreamTokenizer strt = new StreamTokenizer(r);
// указываем, что будем читать числа
strt.parseNumbers();
// считываем первое число из файла
double a = readDouble(strt);
// считываем второе число из файла
double b = readDouble(strt);
// считываем третье число из файла
double c = readDouble(strt);
double d, m, eps = 1e-8;
String Sa;
// рассматриваем различные случаи при решении уравнения
if (Math.abs(a) < eps)
if (Math.abs(b) < eps)
if (Math.abs(c) < eps)
Sa = "any solution";
else
Sa = "no solution";
else
Sa = "x1 = x2 = " + (-c / b);
else
{
if((d = b * b - 4 * a * c) < 0)
{
d = 0.5 * Math.sqrt(-d) / a;
a = -0.5 * b / a;
Sa = "x1 =" + a + " + i" + d + ", x2= " + a + " - i" + d;
}
else
{
d = 0.5 * Math.sqrt(d) / a;
a = -0.5 * b / a;
Sa = "x1 = " + (a + d) + ", x2 = " + (a - d);
}
}
System.out.println(Sa);
}
catch (Exception e)
{
System.out.println(e.toString());
return;
}
}
}
Лабораторная работа № 5.
Листинг 5. ab5.java - решение квадратного уравнения с чтением данных из файла ab5.text, c использованием меню и записью результата в файл Score.txt
-----------------------------------------------------------
//подключение пакетов, содержащих классы
import java.io.*; //для ввода-вывода данных
import java.awt.*; // для работы с графикой
import java.awt.event.*;//для обработки событий
// Объявляем класс ab5, являющий собой окошко Frame...
public class ab5 extends Frame
implements Serializable,WindowListener,ActionListener{
String Sa;
//count - количество считанных чисел из файла.
int count,i;
double a,b,c;
//Объявляем файловый диалог для открытия файла...
FileDialog opener;
//Массив символов, считанных из файла...
// Метод, читающий вещественные числа.
// Создает исключение, если не удалось прочитать число.
private static double readDouble(StreamTokenizer st) throws Exception
{
// читаем следующую лексему из файла
st.nextToken();
// если не удалось прочитать число - создаем исключение
if (st.ttype != st.TT_NUMBER)
throw new Exception();
// возвращаем прочитанное число
return st.nval;
}
public ab5(){
// Создаем окно с размещенными на нем элементами меню...
super("Quadratic. (c) 2006. Ivan Khramkov.");
// Устанавливает цвет фона для апплета
super.setBackground(new Color(120,181,202));
// Устанавливаем абсолютное позицирование компонентов внутри апплета
super.setLayout(null);
MenuBar mbar;
MenuItem exit,open,help;
mbar = new MenuBar();
super.setMenuBar(mbar);
// Устанавливаем размер и расположение окна
super.setSize(599,153);
super.setLocation(233,233);
// Создаем меню File с пунктами Open, Help, Quit
Menu file = new Menu("File");
open=new MenuItem("Open");
help=new MenuItem("Help");
exit=new MenuItem("Quit...");
// Открываем прослушиватель
open.addActionListener(this);
// Добавляем прослушиватель
exit.addActionListener(this);
// событий для
help.addActionListener(this);
// каждого пункта меню...
file.add(open);
file.add(help);
file.add("-");
file.add(exit);
mbar.add(file);
// Добавляем прослушиватель событий окна для нашего окна...
addWindowListener(this);
setVisible(true);
}
public static void main(String[] args)
{ab5 f=new ab5(); //Создаем объект-окно...
}
// Событие при попытке закрыть окно...
public void windowClosing(WindowEvent we){
dispose(); System.exit(0); }
// Метод для вывода графики в окне
public void paint(Graphics g){
// Установка цвета
g.setColor(new Color(120,181,202));
// Заполнение прямоугольника
g.fillRect(0,0,533,333);
// Установка черного цвета
g.setColor(Color.black);
// Вывод строки
g.drawString(Sa,9,53); }
//
public void actionPerformed(ActionEvent ae){
Graphics g=getGraphics();;
String str=(String)ae.getActionCommand();
if (str.equals("Open")){
//Если выбрали пункт меню "Open"...
i=0; opener=new FileDialog(this);
// Вызываем окно
opener.setVisible(true);
// для открытия файла...
String what;
if(opener.getFile()!=null)
{
what=opener.getDirectory()+
opener.getFile();
// Фиксируем путь и имя выбранного файла.../
try {data(what,0);}
catch (Exception re){
Sa="Your output Error is: "+re.getMessage();
System.out.println("Your input Error is: "+
re.getMessage());
}
what=opener.getDirectory()+"Score.txt";
try{data(what,1);}
catch (Exception re){
Sa="Your output Error is: "+re.getMessage();
System.out.println("Your output Error is: "+
re.getMessage());
}
}
}
else
if(str.equals("Help")){
//Если выбрали пункт меню "Help"...
g.setColor(new Color(120,181,202));
g.fillRect(0,0,533,333);
g.setColor(Color.black);
g.drawString("Click on OPEN menu item and choose file, where constants a,b,c should be.",33,53);
g.drawString("After that, you will see the solution of quadratic, you needed to solve.",33,73);
g.drawString("If you want to save results, you can open text file,",33,93);
g.drawString(" named Score.txt, situated in such directory as this program.",33,113);
}
else {dispose(); System.exit(0);}
}
// Функция data(String path,int mode) - служит для записи
// и чтения информации из определенных файлов...
// Здесь: path - путь и имя файла, mode - сущность работы.
//Принимает 2 значения:
// 0 - если нужно считать информацию...
// 1 - если записать информацию...
public void data(String path,int mode) throws Exception {
if (mode==0) {
try
{
// Открываем поток для чтения из файла
DataInputStream dis = new DataInputStream(new FileInputStream(path));
// инициализируем символьный поток
Reader r = new BufferedReader(new InputStreamReader(dis));
// создаем объект, разбирающий числа в открытом потоке
StreamTokenizer strt = new StreamTokenizer(r);
// указываем, что будем читать числа
strt.parseNumbers();
// считываем коэффициент A
a = readDouble(strt);
// считываем коэффициент B
b = readDouble(strt);
// считываем коэффициент C
c = readDouble(strt);
}
catch (Exception e)
{
// выдаем сообщение об ошибке
Sa="Your output Error is: "+e.getMessage();
System.out.println("Your output Error is: "+
e.getMessage());
}
}
else
{
// Объявление файловой переменной для записи в файл...
Writer outp=new FileWriter(path);
int j;
getVal(a,b,c);
try{
for(j=0;j<Sa.length();j++)
outp.write(Sa.charAt(j));
outp.write("\n");
outp.close();
}
catch(Exception e){
// выдаем сообщение об ошибке
Sa="Your output Error is: "+e.getMessage();
System.out.println("Your output Error is: "+
e.getMessage());
}
}
}
// Решение уравнения ax2+bx+c=0
// Ответ присваивается строковой переменной Sa, которая потом
// пишется в файл и выводится на отображение в окне...
public void getVal (double a,double b,double c){
double d, m, eps = 1e-8;
int i;
if(Math.abs(a) < eps)
if(Math.abs(b) < eps)
if(Math.abs(c) < eps)
Sa="any solution";
else
Sa="no solution";
else
Sa="x1 = x2 = " + (-c/b);
else
{if((d = b*b - 4*a*c) < 0)
{d=0.5*Math.sqrt(-d)/a;
a=-0.5*b/a;
Sa="x1 ="+a+" + i" +d+ ",x2="+a+"-i"+d;
}
else
{ d=0.5*Math.sqrt(d)/a;
a=-0.5*b/a;
Sa="x1 = "+(a+d)+", x2 = "+(a-d);
}
}
}
// Функции обработки событий окна...
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowDeiconified(WindowEvent we){}
}
При запуске программы ab5 появляется окошко с опцией File, в которой выбрав Open и выбрав имя заранее подготовленного файла с данными (например, ab5.data cо строкой 1 –5 6) получаем указанный выше результат.