Листинг 5.13. Бинарное дерево объектов




class ObjectTree{

// Количество цифр в ID-коде объекта:

private static int IDnum=8;

// Уровень объекта (буква):

private char Level;

// Номер объекта на уровне:

private int Number;

// Код объекта (массив цифр):

private int[] ID;

// Ссылка на первый объект:

ObjectTree FirstRef;

// Ссылка на второй объект:

ObjectTree SecondRef;

// Метод для генерирования ID-кода объекта:

private void getID(){

ID=new int[IDnum];

for(int i=0;i<IDnum;i++)

ID[i]=(int)(Math.random()*10);

}

// Метод для отображения ID-кода объекта:

private void showID(){

for(int i=0;i<IDnum;i++)

System.out.print("|"+ID[i]);

System.out.print("|\n");

}

// Метод для отображения параметров объекта:

void show(){

System.out.println("Уровень объекта: \t"+Level);

System.out.println("Номер на уровне: \t"+Number);

System.out.print("ID-код объекта: \t");

showID();

}

// Конструктор создания бинарного дерева:

ObjectTree(int k,char L,int n){

System.out.pr1nt1n("\tСоздан новый объект!");

Leve1=L;

Number=n;

getID();

show();

if(k==1){

FirstRef=nu11;

SecondRef=nu11;

}

else{

// Рекурсивный вызов конструктора:

FirstRef=new ObjectTree(k-1,(char)((1nt)L+1),2*n-1);

SecondRef=new ObjectTree(k-1,(char)((1nt)L+1),2*n);}

}}

class ObjectTreeDemo{

public static void main(String[] args){

// Дерево объектов:

ObjectTree tree=new ObjectTree(4,'A',1);

System.out.pr1nt1n("\tПроверка структуры дерева объектов!");

// Проверка структуры дерева объектов:

tree.F1rstRef.SecondRef.F1rstRef.show();

}}

Конструктор класса принимает три аргумента: целочисленный аргумент опреде­ляет количество уровней в структуре, начиная с текущего объекта, а символь­ные аргументы определяют метку уровня и номер объекта на уровне. Детальнее остановимся на коде конструктора, поскольку именно при его вызове создается вся структура бинарного дерева.

При вызове конструктора выводится сообщение о создании объекта, после чего на основе значений аргументов конструктора присваиваются значения полям Level и Number. Затем с помощью метода getID() генерируется идентификаци­онный код объекта и методом show() выводится информация о созданном объ­екте. Вторая часть кода конструктора реализована через условную инструкцию. В ней первый аргумент конструктора проверяется на предмет равенства еди­нице. Если первый аргумент равен единице (это означает, что после текущего объекта других объектов нет), полям-ссылкам FirstRef и SecondRef в качестве значений присваиваются нулевые ссылки (значение null), означающие, что текущий объект не имеет ссылок на другие объекты. В противном случае, то есть если аргумент конструктора отличен от единицы, следующими командами создаются два новых объекта, и ссылки на них в качестве значений присваива­ются полям FirstRef и SecondRef текущего объекта:

FirstRef=new ObjectTree(k-1,(char)((int)L+1),2*n-1);

SecondRef=new ObjectTree(k-1,(char)((int)L+1),2*n);

При этом конструкторам при создании новых объектов передается на единицу уменьшенный первый аргумент. Уровень новых создаваемых объектов вычис­ляется на основе текущего значения L для уровня текущего объекта как (char) ((int)L+1). Инструкцией (int)L вычисляется код символа L, а затем, после уве­личения кода символа на единицу, выполняется явное преобразование в сим­вольный вид (инструкцией (char)). Для первого из двух создаваемых объектов номер объекта вычисляется на основе номера текущего объекта n как 2*n-1. Вто­рой объект получает номер 2*n. Принцип нумерации рассчитан так, что если в вершине иерархии объект имеет номер 1, то на всех прочих уровнях объекты нумеруются последовательностью натуральных чисел. Таким образом, код кон­структора класса реализован по рекурсивному принципу: в конструкторе вызы­вается конструктор, но с другими аргументами. Чтобы создать бинарное дерево, вызывается конструктор, первым аргументом которому передается количество уровней в бинарном дереве, имя (буква) для первого объекта и номер объекта в вершине иерархии объектов дерева.

В главном методе программы командой

ObjectTree tree=new ObjectTree(4,'A',1)

создается дерево из четырех уровней, после чего выполняется проверка со­зданной структуры: через систему последовательных ссылок вызывается ме­тод show() для отображения параметров одного из объектов в структуре дерева (командой tree.FirstRef.SecondRef.FirstRef.show()). Результат выполнения программы может иметь следующий вид:

Создан новый объект!

Уровень объекта: A

Номер на уровне: 1

ID-код объекта: |3|5|1|1|1|1|5|0|

Создан новый объект!

Уровень объекта: B

Номер на уровне: 1

ID-код объекта: |3|6|4|8|2|2|2|9|

Создан новый объект!

Уровень объекта: C

Номер на уровне: 1

ID-код объекта: |7|6|7|8|9|1|5|7|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 1

ID-код объекта: |5|6|6|1|6|6|5|4|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 2

ID-код объекта: |3|6|5|0|2|1|6|7|

Создан новый объект!

Уровень объекта: C

Номер на уровне: 2

ID-код объекта: |7|6|0|9|6|1|0|2|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 3

ID-код объекта: |9|2|6|2|5|5|9|9|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 4

ID-код объекта: |8|7|7|0|1|2|1|4|

Создан новый объект!

Уровень объекта: B

Номер на уровне: 2

ID-код объекта: |1|7|3|8|8|1|9|2|

Создан новый объект!

Уровень объекта: C

Номер на уровне: 3

ID-код объекта: |9|3|2|4|7|9|4|7|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 5

ID-код объекта: |7|9|6|4|9|4|4|4|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 6

ID-код объекта: |0|9|5|4|5|5|7|4|

Создан новый объект!

Уровень объекта: C

Номер на уровне: 4

ID-код объекта: |4|1|6|6|9|7|8|1|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 7

ID-код объекта: |6|4|7|5|0|0|0|3|

Создан новый объект!

Уровень объекта: D

Номер на уровне: 8

ID-код объекта: |3|9|9|6|7|3|6|3|

Проверка структуры дерева объектов!

Уровень объекта: D

Номер на уровне: 3

ID-код объекта: |9|2|6|2|5|5|9|9|

 

Сначала сверху вниз (см. рис. 5.2) создаются объекты, имеющие номер 1. Затем создается объект последнего уровня с номером 2. Далее создается объект пред­последнего уровня с номером 2, после чего объект предпоследнего уровня с но­мером 3, объект с номером 4 и т. д. Командой tree.FirstRef.SecondRef.FirstRef. show() метод show() вызывается из объекта уровня D с номером 3. Параметры именно этого объекта отображаются в конце программы.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-07-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: