![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Общая схема записи данных в поток и чтения данных из потока
Байтовый поток: свойства, связь потока с файлом, чтение и запись, закрытие
Потоки ввода последовательности байтов являются подклассами абстрактного класса InputStream, потоки вывода – подклассами абстрактного класса OutputStream. Эти классы являются суперклассами для ввода массивов байтов, строк, объектов, а также для выбора из файлов и сетевых соединений. При работе с файлами используются подклассы этих классов соответственно FileInputStream и FileOutputStream, конструкторы которых открывают поток и связывают его с соответствующим физическим файлом.
Для чтения байта или массива байтов используются абстрактные методы read() и read(byte[] b) класса InputStream. Метод возвращает -1, если достигнут конец потока данных, поэтому возвращаемое значение имеет тип int, не byte. При взаимодействии с информационными потоками возможны различные исключительные ситуации, поэтому обработка исключений вида try-catch при использовании методов чтения и записи является обязательной. В конкретных классах потоков ввода указанные выше методы реализованы в соответствии с предназначением класса. В классе FileInputStream данный метод читает один байт из файла, а поток System.in как встроенный объект подкласса InputStream позволяет вводить информацию с консоли. Абстрактный метод write(int b) класса OutputStream записывает один байт
в поток вывода. Оба эти метода блокируют поток до тех пор, пока байт не будет записан или прочитан. После окончания чтения или записи в поток его всегда следует закрывать с помощью метода close(), для того чтобы освободить ресурсы приложения.
Поток ввода связывается с одним из источников данных, в качестве которых могут быть использованы массив байтов, строка, файл,
4. Потоки символов: свойства, связь потока с файлом, чтение и запись
Для обработки символьных потоков в формате Unicode применяется отдельная иерархия подклассов абстрактных классов Reader и Writer, которые почти полностью повторяют функциональность байтовых потоков, но являются более актуальными при передаче текстовой информации. Например, аналогом класса FileInputStream является класс FileReader. Такой широкий выбор потоков позволяет выбрать наилучший способ записи в каждом конкретном случае.
5. Потоки строк: свойства, связь потока с файлом, чтение и запись, закрытие.
Обработка строк текстового файла, не представляющих числовые данные,
обычно состоит из следующих действий:
– ввод строки из файла при помощи метода readLine (метод возвращает объект
типа String, содержащий введенную строку, или null, если строки в файле
закончились);
– разделение строки на слова (методы класса Tokenizer или метод split,
аргументом которого является регулярное выражение, соответствующее
разделителям;
– обработка слов строки согласно поставленной задаче.
Обработка числовых данных в свободном формате отличается от обработки
текстовых строк только тем, что после разделения строки на слова слово
преобразуется в число подходящим методом. Методы находятся в классах-
6. Исключения при работе с потоками
Случаи, при которых возникает исключение IOException
- чтение после того, как данные в потоке закончились, или поток закрыт
- запись данных, для которых нет места на диске
- запись данных после того, как поток закрыт
- закрытие выводного потока, если нельзя записать оставшиеся в буфере данные.
- при попытке связать поток с файлом, имя которого задано неверно, возникает исключение FileNotFoundException.
7. Понятие рекурсии. Рекурсивное вычисление факториала
Рекурсия-прием, при котором нечто выражается через такое же
class Factorial {
// рекурсивный метод
int fact(int n) {
int result;
if (n == 1)
return 1;
result = fact(n - 1) * n;
return result;
}
}
Вызовем рекурсивный метод:
Factorial f = new Factorial();
// получим число, введенное пользователем
int usernumber = Integer.valueOf(editResult.getText().toString());
// вычисляем факториал и выводим результат в текстовой метке
textViewInfo.setText("Факториал " + usernumber + " равен "
+ f.fact(usernumber));
Теперь, если вводить числа в текстовом поле, то получим следующие результаты:
Факториал 3 равен 6
Факториал 4 равен 24
Факториал 5 равен 120 и т.д.
Понять, как работает метод, довольно трудно, можно всю голову сломать. Однако попробуем. При вызове метода fact() с аргументом, равным 1, вернётся 1. Тут пока понятно. При других числах возвращается fact(n - 1) * n. Получается, что нужно ещё раз вызвать метод fact(). И так происходит до тех пор, пока не дойдёт до единицы. При этом промежуточные значения умножаются.
Когда метод вызывает сам себя, новым локальным переменным и параметром выделяется место в стеке и код метода выполняется с этими новыми начальными значениями. При каждом возврате из рекурсивного вызова старые локальные переменные и параметры удаляются из стека, и выполнение продолжается с момента вызова внутри метода.
8. Понятие рекурсии.Рекуурсивное вычисление суммы элементов массива
Рекурсия-прием, при котором нечто выражается через такое же.
public class MasRec { /** * @param args */ public int summa(int N, int a[]) { if (N==0) return a[0]; else return a[N]+summa(N-1, a); } public static void main(String [] args) { // TODO Auto-generated method stub int n = 2; int mas[]; mas = new int [n]; Random randomGenerator = new Random (); for (int i=0;i<n;i++) { mas[i] = randomGenerator.nextInt(100); //System.out.print(mas[i]); //System.out.print(" "); }9. Понятие рекурсии. Рекурсивное вычисление максимума в массиве
Рекурсия-прием, при котором нечто выражается через такое же.
public int max(int [] source) { return maxInter(source, Integer. MIN_VALUE); } private int maxInter(int [] source, int maxValue) { if (source.length == 0) return maxValue; else { int currentElement = source[0]; int tmpMaxValue = (maxValue >= currentElement)? maxValue: currentElement; return maxInter(java.util. Arrays. copyOfRange(source, 1, source.length), tmpMaxValue); } }10. Формулировка задачи о ханойских башнях
Рассмотрим известную задачу о конце света — «Ханойские башни». Ее содержательная постановка такова. В одном из буддийских монастырей монахи уже тысячу лет занимаются перекладыванием колец. Они располагают тремя пирамидами, на которых надеты кольца разных размеров.
В начальном состоянии 64 кольца были надеты на первую пирамиду и упорядочены по размеру. Монахи должны переложить все кольца с первой пирамиды на вторую, выполняя единственное условие — кольцо нельзя положить на кольцо меньшего размера. При перекладывании можно использовать все три пирамиды. Монахи перекладывают одно кольцо за одну секунду. Как только они закончат свою работу, наступит конец света.
11. Применение рекурсии при определении связного списка
Список-это элемент и остальной список???
В лекциях
12. Понятие списка. Определение элемента списка
Связные списки являются самым простым примером абстрактных
динамических типов данных – типов данных, которые применяются при
решении многих задач дискретной математики и программирования. Слово
«абстрактные» означает в данном случае, что элементы списка могут иметь
произвольную природу, слово «динамические» отмечает, что количество
элементов списка может изменяться при выполнении программы.
Особенностью списков являются:
- Наличие у каждого элемента информационной и связывающей частей, причем
именно связывающая часть обеспечивает динамичность;
- Малое количество базовых операций со списками.
В списке выделяют «голову» и элементы. Если нет «головы», то нет списка. Если
нет элементов, то список – пустой. Последний элемент списка называют «хвост».
Обычно голова и элементы – одного типа. Из головы непосредственно доступен
только один элемент.
13. Структура объявления элемента двусвязного списка.
14. Типовые операции для односвязных списков.
Удалить все элементы списка, проверить равенство списков, добавить/удалить элемент из заданной позиции, получить элемент по его номеру, упорядочить элементы, найти позицию данного элемента в упорядоченном списке, расположить элементы в порядке, обратном исходному.
15. Кольцевой и двусвязный списки: отличия от одного связного
Кольцевой и двусвязный списки отличаются от односвязного тем, что в двусвязном элементы содержат ссылки на следующий и предыдущий элементы, а в кольцевом последний элемент содержит ссылку на первый(в случае двусвязного кольцевого-первый содержит ссылку на последний, а последний-на первый)
16. Порядок добавления элемента в двусвязный список.
Поле связи «головы» списка сохраняется в рабочей
переменной; значение ссылки на новый элемент, данное операцией new,
помещается в область связи «головы»; значение ссылки из рабочей
переменной копируется в область связи нового элемента. В списке появился
новый элемент, на который указывает голова.
17. Рекурсивный и итерационный методы обработки списка(на примере печати спсика)
-Рекурсивный:
public static void printMyList (Node с) { //напечатать список
if(c!=null) { // если список существует,
System.out.print(c.inf+ " "); //напечатать информационную часть
printMyList(c.next); //и напечатать остаток
}; //if
} //printMyList
-Итерационный:
public static void printMyList (Node с) { //напечатать список
while(c!=null) { // если список существует,
System.out.print(c.inf+ " "); //напечатать информационную часть
c=c.next; //и перейти по связи к следующему
}; //while
} //printMyList
18. Основные типы коллекций, имеющихся в Java Collection Framework
Java содержит средства для единообразной работы с группами объектов
(коллекциями) – набор классов JFC – Java Collection Framework1. Классы JFC
обеспечивают работу с наборами объектов произвольной природы так, словно они
находятся в массиве, но с возможностью изменения количества элементов массива.
JFC состоит из таких частей:
интерфейсы, которые определяют функциональность коллекции;
реализации – классы, реализующие методы интерфейсов;
алгоритмы – методы решения типовых задач с коллекциями.
Основные типы коллекций:List,Set,SortedSet,Queue,Map,SortedMap.
19. Составные части JCF и их назначение
-Интерфейсы(функц-ть)
-Реализации(варианты программ для выполнения действий)
-Алгоритмы(методы решения типовых задач)
20. Назначение интерфейсов и алгоритмов JCF
Интерфейсы позволяют сконцентрировать внимание на операциях с коллекциями, отвлекаясь от реализацииИнтерфейсы содержат имена действий (методов) для работы с коллециями и их элементами. Сами методы содержатся в реализациях.
Алгоритмы для решения типовых задач, в которых данными являются
коллекции, содержатся в классе java.util.Collections. Алгоритмы обеспечивают
сортировку данных (sort), перемешивание данных (shuffle), поиск элементов
(binarySearch), поиск экстремальных элементов (min, max). Имеется также ряд
методов для дополнительных действий с коллекциями [1, с].
21. Коллекции:списки-основные методы интерфейса List
public interface List<E> extends Collection<E> {
// доступ по номеру (индексу)
E get(int index);
E set(int index, E element); //optional-необязательный
boolean add(E element); //optional-необязательный
void add(int index, E element); //optional-необязательный
E remove(int index); //optional-необязательный
boolean addAll(int index, Collection<? extends E> c); //optional-необязательный
// поиск
int indexOf (Object o); //первый от "головы"
int lastIndexOf (Object o); //последний от "головы"
// Итерации
ListIterator<E> listIterator ();
ListIterator<E> listIterator (int index);
// диапазон
List<E> subList (int from, int to); //подсписок
}
22. Коллекции: множества-основные методы(??) интерфейса Set.
23. Выполнение стандартных операций теории множеств
«U»-addAll();
“\”-removeAll();
“ ”-retainAll();
24. Списки и множества: сходства и различия
??
25. Цикл for-each и его применение в коллекциях
«for-each» разработан для циклической обработки объектов коллекции, такой как массив, в строгой последовательности, от начала к концу.
26. Математическая идея, представляемая элементом Map
Интерфейс Map реализует математическую идею однозначной функции v=f(k) где v- значение, k- ключ, т.е. единственному ключу соответствует единственное значение. Ключи не могут повторяться.
27. Сравнительный анализ реализаций ArrayList и LinkedList.
28. Параметры, по которым сравнивают реализации коллекций
- произвольный доступ
-добавление/удаление элемента
-использование памяти
-скорость обработки
29. Понятие итератора. Назначение итератора для коллекций
Итератор (от англ. iterator) — объект, абстрагирующий за единым интерфейсом доступ к элементам коллекции[1].
30. Сравнение элементов коллекций. Естественное и «неестественное» сравнение
По
31. Различия между интерфейсами Comparable и Comparator. Реализация интерфейсов.
Comparator являет собой отдельную реализацию, т.е его можно использовать многократно и с различными классами, в отличии от Comparable, который используется только для сравнения объектов класса, в котором данный интерфейс реализован.
Для реализации интерфейсов необходимо указать, что класс реализует их, затем определить метод compareTo() или compare()
32. Сортировки с нестандартным и стандартным отношением порядка
Сортировка с нестандартным отношением порядка:
33. Формулировка задачи поиска элемента в коллекции
Постановка задачи: Дана коллекция К и значение элемента Э. Определить, содержит ли К значение Э. Если содержит, результат = номеру элемента; Если не содержит, результат = -1 (вариант: генерируется исключение)
34. Метод двоичного поиска в массивах и коллекциях
Два варианта ДП: рекурсивный и итерационный
Идея: разделить массив на две (равные) части и
отбросить часть, в которой искомого значения
нет
Сравнивают искомое значение (s) и значение в
середине массива (am).
Если am<s, искомого элемента нет слева от am
Если s<am, искомого элемента нет справа от am
Применение метода binarySearch
• метод может применяться к массивам
или упорядоченным коллекциям
(кл. Arrays или Collections)
• возвращает позицию найденного
элемента или (-позицию-1), в которую
его следовало бы поместить, чтобы не
нарушить упорядоченность
• метод будет применен для массива из
предыдущих примеров
public static int binSearch (int[ ] A, int v) throws
NotFoundException {
return bSWork(A,0,A.length-1,v);
}
public static int bSWork(int[ ] a, int lo, int hi, int s) throws
NotFoundException{
if (hi<lo) throw new NotFoundException(s);
int m = (hi+lo)/2; //середина массива
if (s==a[m]) return m; //искомый – в середине
if (s < a[m]) return bSWork(a, lo, m-1, s); //искать слева
else return bSWork(a, m+1, hi, s); //искать справа
}
35. Метод прямого поиска в массивах и коллекциях
public class LinSearch1{
public static void main() {
int[ ] A = {2,5,1,8,6,5,3,8,17}; //массив, в котором ищем
int[ ] V = {17,4,8}; //три поиска: ищем 17, ищем 4, ищем 8
for(int val:V) { //выбираем искомое значение
try {
int pos = linSearch(A,val); // выполняем поиск, если не найдено - исключение
System.out.println("Value "+val+" at pos "+pos); //если найдено
} //try
catch (Exception e) { //если не найдено, обрабатываем исключение
System.out.println("Ne najdeno!+Value “+e.getMessage());
} //catch
}//for-each
}//main
public static int linSearch(int[ ] B, int v) throws NotFoundException {
int i=0;
while((i<B.length)&& (B[i]!=v)) i++; //если не нашли, движемся дальше
if (i== B.length) throw new NotFoundException(v);
return i; //выполняется, только если найдено!
}
}// LinSearch1
public class NotFoundException extends Exception {
public NotFoundException(){ }
public NotFoundException(int value){super (String.valueOf (value)); }
}
//т.к. нужного исключения в Java нет, создаем его
36. Понятие графического интерфейса пользователя. Составные элементы фрейма
ГИП-средство и способ взаимодействия пользователя и программы при помощи мышки и клавиатуры.
Фрейм состоит из:
-границы
-заголовка
-панели содержимого(контента).
37. Библиотеки Java, поддерживающие графический интерфейс.
-библиотека AWT(первая, вполне удачная попытка)
-библиотека Swing(более новая, являющайяся расширением, а в некоторых случаях-заменой библиотеки AWT)
38. Компонент и контейнер- основные элементы ГИП
Компонент-объект, с которым может взаимодействовать пользователь и который имеет графическое представление на экране.
Контейнер-хранилище компонентов, в совокупности составляющих графический интерфейс программы.
39. JFrame и иерархии объектов графики.
Для создания окна приложения в Swing используется класс JFrame. Он содержит ряд методов и свойств, которые позволяют настроить его должным образом.
Иерархия классов объектов графики:
java.lang.Object;
java.awt.Component;
java.awt.Container;
java.awt.Window;
java.awt.Frame;
javax.swing.JFrame;
40. Контейнеры высшего уровня в Swing-приложении.
После создания пользовательского интерфейса необходимо вывести его на экран, чтобы пользователь увидел его и смог им воспользоваться. Для этого предназначены специальные компоненты библиотеки Swing, называемые контейнерами высшего уровня (top level containers). Они представляют собой окна операционной системы, в которых вы размещаете компоненты своего пользовательского интерфейса. К контейнерам высшего уровня относятся окнаJFrame и JWindow, диалоговое окно JDialog, а также апплет JApplet
41. Структура простейшего ГИП-приложения
42. Цвет в ГИП. Конструкторы и цветовые константы
За цвет в ГИП отвечает класс Color.
Конструкторы: Color(int r, int g, int b)-задает цвет в RGB(0-255)
Color (float t,float g,float b)-задает цвет в RGB(0.0-1.0)
43. Контекст графического устройства. Составляющие контекста.
При создании компонента, т. е. объекта класса Component, автоматически формируется его графический контекст (graphics context). В контексте размещается область рисования и вывода текста и изображений. Контекст содержит текущий и альтернативный цвет рисования и цвет фона — объекты класса color, текущий шрифт для вывода текста — объект класса Font.
В контексте определена система координат, начало которой с координатами (0, 0) расположено в верхнем левом углу области рисования, ось Ох направлена вправо, ось Оу — вниз. Точки координат находятся между пикселами.
Управляет контекстом класс Graphics или новый класс Graphics2D, введенный в Java 2. Поскольку графический контекст сильно зависит от конкретной графической платформы, эти классы сделаны абстрактными. Поэтому нельзя непосредственно создать экземпляры класса Graphics или Graphics2D.
44. Интерфейс Shape. Классы, реализующие интерфейс, для изображения прямых, прямоугольников и овалов.
Интерфейс Shape определяет объекты, представляющие некоторые геометрические фигуры.
Rectangle2D,Ellipse2D,polygon,Line2D…
45. Вывод текста в графическом интерфейсе.
Вывод текста в ГИП осуществляется с помошью метода drawstring(Sring str).
46. Управляющие элементы графического интерфейса- внешний вид в назначение.
Набор абстракций для работы с окнами AWT
1. Класс Component — абстрактные класс, инкапсулирует все объекты визуального интерфейса. Содержит около 100 открытых методов. Отвечают за обработку событий, управление фокусом, прорисовка графического представления, шрифты и цвета.
1. Container — абстрактный класс, отвечает за размещение других компонентов. Даёт возможность построения иерархии системы визуальных объектов. Отвечает за расположение содержащихся в нём компонентов.
1. Panel — конкретная реализация контейнера. С помощью метода add в объекты Panel можно добавлять другие компоненты. Вручную можно менять их размеры и расположение с помощью move, resize, reshape, setLocation, setSize, setBounds. Рассматривается как окно без рамки.
1. Applet
2. Window
1. Frame
2. Dialog
1. FileDialog
2. Button
3. CheckBox
4. List
5. Canvas — холст для вывода графики
6. Label
7. List
8. Scrollbar — полоса прокрутки
9. TextComponent
1. TextField
2. TextArea
47. Кнопка. Состояние кнопки. События кнопки, их обработка и идентификация.
В Java Swing кнопка представлена классом JButton. У кнопки имеются различные методы для ее конфигурирования — установка надписи на JButton, установка иконки, выравнивание текста, установка размеров и так далее. Кроме всего прочего разработчику необходимо навесить на JButton слушателя, который будет выполняться как только пользователь нажмет на кнопку.
Как только пользователь нажимает кнопку, создается ActionEvent событие, которое передается слушателям кнопки. Для того, чтобы организовать слушателя Swing предоставляет интерфейс ActionListener, который необходимо реализовать. Интерфейс ActionListener требует только реализации одного метода — actionPerformed. Пример класса, реализующего интерфейс ActionListener представлен ниже.
public class TestActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { //Код, который нужно выполнить при нажатии } } |
После того, как обработчик создан, его необходимо добавить к кнопке. Делается это при помощи метода addActionListener. В качестве параметра методу передается обработчик. Например, это можно сделать вот так:
JButton button = new JButton("Test button"); ActionListener actionListener = new TestActionListener(); button.addActionListener(actionListener); |
Здесь мы создаем сначала кнопку. Потом создаем экземпляр нашего слушателя TestActionListener, а затем добавляем его в качестве слушателя к кнопке с помощью вызова addActionListener и передаем ему экземпляр обработчика. Вообще слушателей может быть неопределенное количество. Если нам будет необходимо два или более слушателей, которые должны будут по-разному реагировать на нажатие кнопки, то для каждого из них вызовем addActionListener.
48. Структура программы, имеющей интерфейс с двумя кнопками.
import java.awt.*;import javax.swing.*;
import java.awt.event.*;
public class JB1Main implements ActionListener{
private static void createAndShowGUI() {
JFrame frame = new JFrame("J FRAME with Buttons");
frame. set DefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();
JButton button1=new JButton("First button");
JButton button2=new JButton("Second button");
button1. add ActionListener(new JB1Main());
button2. add ActionListener(new JB1Main());
panel. add (button1);panel. add (button2);
frame. get ContentPane(). add (panel); frame. set Size(600,600); frame. set Visible(true);
}
public static void main(String[] args) {createAndShowGUI();}
public void actionPerformed(ActionEvent e){
System.out.println("Нажата кнопка "+e. get ActionCommand());
String com=e. get ActionCommand();
if(com.equals("First button"))System.out.println("First");
}
}
49. Элемент интерфейса «условие»(флажок), его конструкторы и обработка событий.
CheckBox – это название класса Java Swing, который представляет компонент-флажок или чекбокс. Что есть флажок или чекбокс? Это компонент, который имеет два состояния включен и выключен. Причем одно состояние естественно исключает другое. Соответствующее состояние компонента JCheckBox показывается галочкой. Если JCheckBox находится во включенном состоянии – галочка отображается, если в выключенном – галочки нет.
Обработка событий производится с помощью слушателя, который назначается с помощью метода addActionListener().
50. Элемент интерфейса «радиокнопка», его конструкторы и обработка событий радиокнопок.
Элемент управления JRadioButton предназначен для организации выбора только одного значения из нескольких возможных. Для этого несколько элемемнтов JRadioButton объединяются в одну группу, которая работат как единое целое - если выбрать одну из радиокнопок, входящих в группу, то остальные радиокнопки из этой группы становятся невыбранными.
Дата публикования: 2015-02-18; Прочитано: 316 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!