написание java метода, который возвращает логическое значение из поиска - PullRequest
0 голосов
/ 03 февраля 2020

Я написал метод, который ищет дерево, чтобы проверить, являются ли какие-либо целые числа отрицательными.

Но я изо всех сил пытаюсь получить верное логическое значение. Есть какие-нибудь указатели относительно того, где я иду не так?

Чего я хочу добиться, так это того, что как только условие удовлетворяется, возвращается ложное значение, но, к сожалению, мой код всегда возвращает истинное значение

static boolean allE(Tree<Integer> x) {
  if (x.isEmpty()) return true;
  else {
    if (x.getValue()%2 != 0) return false;  
  }

  allE(x.getLeft());
  allE(x.getRight());

  return true;
}

Ответы [ 3 ]

4 голосов
/ 03 февраля 2020

Когда вы выполняете рекурсию на allE, вам необходимо учитывать результат этой рекурсии. Самое простое исправление, которое я вижу, заменить

allE(x.getLeft());
allE(x.getRight());
return true;

на

return allE(x.getLeft()) && allE(x.getRight());

Хотя, я думаю, что имеет смысл написать алгоритм так, чтобы вы использовали его явно, даже в явном виде. И allE сохраняет три буквы по сравнению с allEven (, пожалуйста используйте значимые имена для методов и переменных). Что-то вроде

static boolean allEven(Tree<Integer> node) {
    if (node.isEmpty()) {
        return true;
    } else if (node.getValue() % 2 == 0) {
        return allEven(node.getLeft()) && allEven(node.getRight());
    }
    return false;
}
1 голос
/ 03 февраля 2020

Вы неправильно используете результаты своих рекурсивных тестов. Должно быть:

if (x.isEmpty()) {
    return true;
}
boolean thisNodeEven = x.getValue() % 2 == 0;
return thisNodeEven && allE(x.getLeft()) && allE(x.getRight());
0 голосов
/ 03 февраля 2020

Полагаю, вам нужно оценить возвращаемое значение рекурсивных вызовов:

static boolean allE(Tree<Integer> x)
{
    if (x.isEmpty())
        return true;
    else {
        if (x.getValue()%2 != 0) return false;    
    }
    if(!allE(x.getLeft()) || !allE(x.getRight())) 
        return false;
    return true;
  }
...