Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
В этих классах определяются две ошибки, которые могут возникнуть в работе с очередью: попытки поместить элемент в заполненную очередь и извлечь элемент из пустой очереди. Эти классы не являются обобщенными, поскольку они действуют одинаково, независимо от типа данных, хранящихся в очереди.
Создайте файл GenQueue.java. Введите в него приведенный ниже код, в котором реализуется очередь фиксированного размера.
// Обобщенный класс, реализующий очередь фиксированного размера,
class GenQueue<T> implements IGenQ<T> {
private T q[]; // Массив для хранения элементов очереди,
private int putloc, getloc; // Индексы размещения и извлечения
// элементов очереди.
// построить пустую очередь из заданного массива
public GenQueue(Т[] aRef) {
q = aRef;
putloc = getloc = 0;
}
// поместить элемент в очередь
public void put(Т obj)
throws QueueFullException {
if(putloc==q.length-1)
throw new QueueFullException(q.length-1);
putloc++;
q[putloc] = obj;
}
// извлечь элемент из очереди
public Т get()
throws QueueEmptyException {
if(getloc == putloc)
throw new QueueEmptyException();
getloc++;
return q[getloc];
}
}
Класс GenQueue объявляется как обобщенный с параметром типа Т. Этот параметр определяет тип данных, хранящихся в очереди. Обратите внимание на то, что параметр типа Т также передается интерфейсу iGenQ.
Конструктору GenQueue передается ссылка на массив, используемый для хранения элементов очереди. Следовательно, для построения объекта класса GenQueue нужно сначала сформировать массив, тип которого будет совместим с типом объектов, сохраняемых в очереди, а его размер достаточен для размещения этих объектов в очереди. В рассматриваемом здесь коде первый элемент массива не используется, поэтому длина массива должна быть на один элемент больше, чем количество элементов, которые допускается хранить в очереди. Например, в следующих строках кода демонстрируется создание очереди для хранения символьных строк:
String strArray[] = new String[10];
GenQueue<String> strQ = new GenQueue<String>(strArray);
Создайте файл GenQDemo.java и введите в него приведенный ниже код. В этом коде демонстрируется работа обобщенной очереди.
/*
Проект 13.1.
Демонстрация обобщенного класса очереди.
*/
class GenQDemo {
public static void main(String args[]) {
// создать очередь для хранения целых чисел
Integer iStoref] = new Integer[10];
GenQueue<Integer> q = new GenQueue<Integer>(iStore);
Integer iVal;
System.out.println("Demonstrate a queue of Integers.");
try {
for(int i=0; i < 5; i++) {
System.out.println("Adding " + i + " to the q.");
q.put(i); // ввести целочисленное значение в очередь q
}
}
catch (QueueFullException exc) {
System.out.println(exc) ;
}
System.out.println();
try {
for(int i=0; i < 5; i++) {
System.out.print("Getting next Integer from q: ");
iVal = q.get();
System.out.println(iVal);
}
}
catch (QueueEmptyException exc) {
System.out.println(exc);
}
System.out.println() ;
// создать очередь для хранения чисел с плавающей точкой
Double dStore[] = new Double[10];
GenQueue<Double> q2 = new GenQueue<Double>(dStore);
Double dVal;
System.out.println("Demonstrate a queue of Doubles.");
try {
for(int i=0; i < 5; i++) {
System.out.println("Adding " + (double)i/2 +
" to the q2.");
q2.put((double)i/2); // ввести значение типа double в очередь q2
}
}
catch (QueueFullException exc) {