Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивный поиск 
V
    Опции темы
diablero
Дата 2.12.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Есть такой вот класс:
Код

public class Folder {
     private int id;
     private ArrayList <Folder> list = new ArrayList<Folder>();
     ....
     public void addSubFolder(Folder folder) {
        list.add(folder);
    }
    public ArrayList <Folder> getSubFolders() {
        return list;
    }
}

Что-то типо каталога.
Мне нужно написать поиск подкаталога, желательно рекурсивный, по id.
Все работает до тех пор, пока не ищется не существующий каталог. 
Как выйти из рекурсии?
Код

private Folder tmpFolder;
    public ArrayList <Folder> getSub(ArrayList <Folder> list, int id) {
        for(Folder folder : list) {
            if(folder.getId()==id) return folder.getSubFolders();
            for(Folder subfolder : folder.getSubFolders()) {
                tmpFolder = folder;
                if(subfolder.getId()==id) return subfolder.getSubFolders();
            }
        }
        return getSub(tmpFolder.getSubFolders(), id);
    }




--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
ivg
Дата 2.12.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



для метода класса Folder можно вот так, например:
Код

    public Folder searchById(int sid) {
        if (this.id == sid) {
            return this;
        }
        Folder result;
        for (Folder f : this.list) {
            if ((result = f.searchById(sid)) != null) {
                return result;
            }
        }
        return null;
    }

для метода не относящегося к классу Folder или статику например вот так:
Код

    public static Folder searchById(List<Folder> folders, int sid) {
        Folder result;
        for (Folder f : folders) {
            if (f.getId() == sid) {
                return f;
            }
            if ((result = searchById(f.getSubFolders(), sid)) != null) {
                return result;
            }
        }
        return null;
    }

PM MAIL   Вверх
Kangaroo
Дата 3.12.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



diablero, что-то у вас код запутанный.
Поддерживаю ivg, сам хотел такое же написать, но он опередил  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
diablero
Дата 3.12.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Да...чего-то я перемудрил на ночь глядяsmile


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
diablero
Дата 22.12.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 1
Всего: 5



Блин еще одна простоя задача с папками, но она меня сводит с ума уже.
А нужна вроде бы простая вещь.
Есть объект фолдер, все тот же. Который содержит в себе сколько угодно фолдеров. Нужно вывести то что он содержит.smile
Код

Вот так:

d:\
--video
---clips
---movies
----drama
----comedy
--music
--soft


Код

public ArrayList <String> getFolderTree(ArrayList <Folder> folders) {
      ....

Т.е. как бы нарисовать дерово. Ни как не получается


Это сообщение отредактировал(а) diablero - 22.12.2007, 19:34


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
LSD
Дата 22.12.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код

  public void printFolder(Folder folder)
  {
    printFolderInt(folder, "");
  }

  private void printFolderInt(Folder folder, String padding)
  {
    System.out.println(padding + folder.getName());
    for(Folder subFolder : folder.getSubFolders())
    {
      printFolderInt(subFolder, padding + "-");
    }
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.