Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
ПРИМЕР 7. Перегрузка конструктора класса Queue
В этом проекте предстоит усовершенствовать класс Queue, добавив в него два дополнительных конструктора. В первом из них новая очередь будет конструироваться на основании уже существующей, а во втором — присваиваться начальные значения элементам очереди при ее конструировании. Добавление этих конструкторов сделает класс Queue более удобным для использования. Последовательность действий 1. Создайте новый файл QDemo2.java и скопируйте в него код класса Queue, созданный в примере №6. 2. Добавьте сначала в этот класс приведенный ниже конструктор, который будет строить одну очередь на основании другой. // Конструктор, строящий один объект типа Queue на основании другого. Queue(Queue ob) { putloc = ob.putloc; getloc = ob.getloc; q = new char[ob.q.length]; // копировать элементы очереди for(int i=getloc+l; i < = putloc; i++) q [i] = ob.q [i]; } Внимательно проанализируем этот конструктор. Сначала переменные putloc и getloc инициализируются в нем значениями, содержащимися в объекте ob, который передается ему в качестве параметра. Затем в нем организуется новый массив для хранения элементов очереди, которые далее копируются из объекта ob в этот массив. Вновь созданная копия очереди будет идентична оригиналу, хотя они и являются совершенно отдельными объектами. 3. Добавьте в данный класс конструктор, инициализирующий очередь данными из символьного массива, как показано ниже. // Конструирование и инициализация объекта типа Queue. Queue (char а []) { putloc = 0; getloc = 0; q = new char[a.length+1]; for(int i = 0; i < a.length; i++) put(a[i]); } В этом конструкторе создается достаточно большая очередь для хранения символов из массива а. В силу особенностей алгоритма, реализующего очередь, длина очереди должна быть на один элемент больше, чем длина исходного массива. 4. Ниже приведен весь код видоизмененного класса Queue, а также код класса QDemo2, демонстрирующего организацию очереди для хранения символов и обращение с ней. // Класс, реализующий очередь для хранения символов, class Queue { private char q[]; // Массив для хранения элементов очереди, private int putloc, getloc; // Индексы размещения и извлечения // элементов очереди. // сконструировать пустую очередь заданного размера Queue(int size) { q = new char[size+1]; 11 выделить память для очереди putloc = getloc = 0; } // сконструировать очередь из существующего объекта типа Queue Queue(Queue ob) { putloc = ob.putloc; getloc = ob.getloc; q = new char[ob.q.length]; // копировать элементы в очередь for(int i=getloc+l; i < = putloc; i++) q[i] = ob.q[i]; } // сконструировать очередь из массива исходных значений Queue (char а []) { putloc = 0; getloc = 0; q = new char[a.length+1]; for(int 1=0; 1 < a.length; i++) put(a[i]); } // поместить символ в очередь void put(char ch) { if(putloc==q.length-1) { System.out.println(" - Queue is full."); return; } putloc++; q[putloc] = ch; } // извлечь символ из очереди char get() { if(getloc == putloc) { System.out.println(" - Queue is empty."); return (char) 0; } getloc++; return q[getloc]; } } // продемонстрировать класс Queue в действии class QDemo2 { public static void main(String args[]) { // построить пустую очередь для хранения 10 элементов Queue ql = new Queue(10); char name[] = {'Т', 'o', 'm'}; // построить очередь из массива Queue q2 = new Queue(name); char ch; int i; // поместить ряд символов в очередь ql for(i=0; i < 10; i++) ql.put{(char) ('A' + i)); // построить одну очередь из другой очереди Queue q3 = new Queue(ql); // показать очереди System.out.print(" Contents of ql: "); for(i=0; i < 10; i++) { ch = ql.get (); System.out.print(ch); } System.out.println(" \n"); System.out.print(" Contents of q2: "); for(i=0; i < 3; i++) { ch = q2.get(); System.out.print(ch); } System.out.println(" \n"); System.out.print(" Contents of q3: "); for(i=0; i < 10; i++) { ch = qS.get 0; System.out.print(ch); } } } Результат выполнения данной программы выглядит следующим образом: Contents of ql: ABCDEFGHIJ Contents of q2: Tom Contents of q3: ABCDEFGHIJ
|