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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пройти по дереву отыскать нужный элемент 
:(
    Опции темы
Samotnik
Дата 13.12.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Привет. 
Есть сформированное дерево. Есть строчка, вида : "sports/male/football/boys9years"
Необходимо распарсить эту строчку, и проверять, соответсвует ли первое значение из этой строчки какому-нибудь узлу на первом уровне, если да, то берем второе слово из строчки и смотрим на чайлды первого нода и т.д.  Судя по всему нужно использовать рекурсию
Кое-что сделал
Код

public static void getInternalCategory(String externalCategory) {
        //    externalCategory = sports/male/football/boys9years
        ArrayList<String> subCategories = new ArrayList<String>();
        StringTokenizer st = new StringTokenizer(externalCategory, "/");
        while(st.hasMoreTokens()) {
            subCategories.add(st.nextToken());
        }
        walkAroundTree(subCategories, tree.getRootElement());        
    }

Засада с рекурсивным методом walkAroundTree, как его реализовать ?   smile 

Это сообщение отредактировал(а) Samotnik - 13.12.2010, 21:02
PM MAIL   Вверх
dobrolub
Дата 14.12.2010, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Код

public static void getInternalCategory(String externalCategory) {
        //    externalCategory = sports/male/football/boys9years
        ArrayList<String> subCategories = new ArrayList<String>();
        StringTokenizer st = new StringTokenizer(externalCategory, "/");
        Node match = null; 
        Node root = tree.getRootNode();
        while(st.hasMoreTokens()) {
            String token = st.nextToken();

            if (match == null && token.equals(root.getText())) {
               match = root;
            } else if (match == null) {
               break; // no match
            } else {
               Node[] children = match.getChildren();
               boolean found = false;
               for (Node child: children) {
                 if (token.equals(child.getText()) {
                   match = child;
                   found = true;
                   break;
                 }
               }
              if (! found)
                break;
            }              
        }

    //best (deepest) match or null will be in a variable match.
    }



Это сообщение отредактировал(а) dobrolub - 14.12.2010, 06:35
PM   Вверх
sergioK
Дата 16.12.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

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



Цитата(Samotnik @ 13.12.2010,  21:01)
Привет. 
Есть сформированное дерево. Есть строчка, вида : "sports/male/football/boys9years"
Необходимо распарсить эту строчку, и проверять, соответсвует ли первое значение из этой строчки какому-нибудь узлу на первом уровне, если да, то берем второе слово из строчки и смотрим на чайлды первого нода и т.д.  Судя по всему нужно использовать рекурсию
Кое-что сделал
Код

public static void getInternalCategory(String externalCategory) {
        //    externalCategory = sports/male/football/boys9years
        ArrayList<String> subCategories = new ArrayList<String>();
        StringTokenizer st = new StringTokenizer(externalCategory, "/");
        while(st.hasMoreTokens()) {
            subCategories.add(st.nextToken());
        }
        walkAroundTree(subCategories, tree.getRootElement());        
    }

Засада с рекурсивным методом walkAroundTree, как его реализовать ?   smile


вопрос в чем как написать рекурсию ?

Код


на вскидку 
public boolean walkAroundTree(Node root, String value) {

  if(root.getText.equal(value ) return true ;

    Node[] childrens = root.getChildren();
   char[] path= value.split("/");
  for(Node t : children ){
    bool rt =  walkAroundTree(t,path[0]);
    if(rt){
     
   for (int i=1, StringBuffer rPath=new StringBuffer((); i<path.length;++){
            rPath.append(path[i]);
    }
      return;  
   }
  }
}



 дальше в с песней в дебагер   smile ,  
BTW
 отличная задачка для интервью 
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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