Опция A (Ницца): функция возвращает значение, когда узел найден, он возвращает другое значение, чем если узел не был найден. Когда вы вызываете метод, если вы получаете значение found
, вы останавливаете цикл и возвращаете значение found
.
Вариант B (Гадкий): если найдено, то исключение (лучше, если это ваша собственная реализация). Не забудьте поймать его.
Опция C (Uglier): то же самое с глобальными (статическими) переменными.
ОБНОВЛЕНИЕ 1:
Похоже, ваш метод должен работать нормально, можете ли вы проверить (System.out.println
), найдено ли ваше значение?
В более личном мнении я бы нашел
protected boolean DFS(String anaphorKey) {
for(Tree<T> child : leafs) {
if(child.head.equals(anaphorKey))
return true;
if(child.DFS(anaphorKey)) // No need to store value. No need to check == true (it is implicit)
return true; // If we are in this line the value was found, always return true
System.out.println(child.head);
//System.out.println("anaphorKey: "+anaphorKey);
}
return false; // If the method did not exit previously it was because the value was not found, so in this line always return false
}
более читабельно (но оно должно работать точно так же, как ваша реализация)