Что ж, когда вы получаете вывод [null, null, null, [null, null, null, null]], вы знаете, что есть ссылка на ваш подключенный узел.Таким образом, второй массив связан с первым, но не наоборот.Поскольку ваш код не соединяет второй узел, а первый связан. Я думаю, что вы не должны печатать список узлов, это приведет к проблемам.
В одном случае узлы соединены вместе, поэтому родительский элемент подключен к дочернему элементу, а дочерний элемент - к родительскому.Теперь, когда вы распечатаете это, вы получите рекурсивное выполнение.
[null, null, null, child [parent [[null, null, null, child [...]]], null, null, null]]
Это приведет к исключению.Вы можете использовать идентификатор для этого, как идентификатор.Таким образом, вы просто распечатываете идентификатор для связанных объектов или, возможно, позицию ->
[1, ноль, ноль, 2]
[(x, y), (x, y), (x, y), (x, y)]
Просто используйте что-то, чтобы идентифицировать узлы, после этого вы можете легко увидеть, существует ли узел или нет.
Итак, другой момент заключается в том, что вы знаете, что у вас есть 4 точки для подключения, поэтому почему бы не использовать:
private Node north;
private Node south;
private Node west;
private Node east;
В дальнейшем это будет проще, и вы небольше не нужно использовать это перечисление.И вы также можете удалить направление в классе Vertex, кстати, это также сбивает с толку Vertex - это точка, а у точек нет направления:)
Или вы просто используете для этого 2x2 Grid,Например:
private Node[][]
Вы можете указать размер сетки через позиции, которые вы знаете, где получить доступ к соседу.Например, координата [1,1] связана с помощью [0,1], [1,0], [2,1], [1,2].И вы также можете легко распечатать всю сетку.
Вы можете поместить этот расчет в алгоритм, чтобы проверить соседей.Таким образом, вам не нужно сохранять узлы в каждом классе узлов.Положение рендеринга, которое вы можете получить, получив доступ к этому объекту, например (просто если вы хотите отрендерить его):
node[1][2].getX();
И я также предлагаю вам взглянуть на Tree-Structures:)