Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Рекурсивный поиск


Автор: diablero 2.12.2007, 22:42
Есть такой вот класс:
Код

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);
    }


Автор: ivg 2.12.2007, 23:42
для метода класса 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;
    }

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

Автор: diablero 3.12.2007, 00:29
Да...чего-то я перемудрил на ночь глядяsmile

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

Вот так:

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


Код

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

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

Автор: LSD 22.12.2007, 20:26
Код

  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 + "-");
    }
  }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)