2015-09-17 4 views
0

Я пытаюсь получить объект Category из его Id. Категория является иерархическим классом, который может содержать другие категории и должности. Моя реализация является рекурсивным:Рекурсивная функция всегда возвращает null

public static AAbstarctCategory getCategory(ACategory category, String id) { 
    if (id == category.id) { 
     return category; 

    } 
    else if (category.categories.containsKey(id)) { 
     return category.categories.get(id); 

    } 
    else if (category.posts.containsKey(id)) { 
     return category.posts.get(id); 

    } 
    else { 
     for (ACategory c : category.categories.getArray()) { 
      getCategory(c,id); 
     } 
    } 
    return null; 
} 

Проблема заключается в том, что функция всегда возвращает нуль ... предложения пожалуйста :)

+0

отладить и проверить значение категории и значение id – Stultuske

+0

добавить оператор возврата 'return getCategory (c, id);' – Saif

ответ

4

Вы не используете значение, возвращенное рекурсивного вызова.

Изменить

for (ACategory c : category.categories.getArray()) { 
     getCategory(c,id); 
    } 

в

for (ACategory c : category.categories.getArray()) { 
     AAbstarctCategory cat = getCategory(c,id); 
     if (cat != null) 
      return cat; 
    } 
+3

Не лучше ли сохранить значение 'getCategory' в значение и проверить если он не равен нулю. В противном случае петля не имела бы смысла. – SomeJavaGuy

+0

@KevinEsche У вас есть точка. – Eran

+0

Убирает всю точку рекурсивного метода, кажется, что lol – kevintjuh93

0

return null; в конце должен быть return getCategory(c, id);, а затем вам нужен другой базовый вариант, который рано возвращает нуль.

Смежные вопросы