как искать в общем дереве узел в Java нерекурсивный - PullRequest
0 голосов
/ 23 декабря 2018

Я новичок в Java, поэтому каждый совет был бы очень признателен.
У меня есть дерево, похожее на файловую систему с файлами и каталогами.Я хочу найти каталог по его имени.Компонент представляет собой интерфейс, и его реализуют как файл, так и каталог.Я написал этот метод в классе Directory, чтобы найти каталог с именем name.

    public Directory getDir(String name) {
            Iterator<Component> iterator = (Iterator<Component>) components.iterator();
            Component component = null; 
            while(iterator.hasNext()) {
                component = iterator.next();
            if(component instanceof Directory) {
                if(component.getName().equals(name)) {
                    return (Directory) component;
                    }
                else component.getDir(name);
            }
        }

        return null;
    }

Каким-то образом этот метод не остановится после нахождения моего каталога.Я пытался написать "return component.getDir(name)", но это не помогает.Он не будет искать в каждом компоненте моего узла, только в первом.Что я делаю неправильно?Пожалуйста, помогите мне.Спасибо

1 Ответ

0 голосов
/ 23 декабря 2018

Похоже на вашу строку: else component.getDir(name) не проверяется на возвращаемое значение.Независимо от того, возвращает ли этот рекурсивный вызов найденный каталог или ноль (ничего не найдено), следующим этапом будет очередной раунд в цикле.

Просто проверьте, не возвращает ли он нуль, а затем верните его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...