繁体   English   中英

编写一个从搜索中返回布尔值的 java 方法

[英]writing a java method that returns a boolean from a search

我写了一个方法来搜索一棵树来测试是否有任何整数为负数。

但我正在努力获得正确的布尔值返回。 关于我哪里出错的任何指示?

我想要实现的是,只要满足条件语句,就会返回 false,但不幸的是我的代码总是返回 true

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

当您对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;
}

您没有正确使用递归测试的结果。 它应该是:

if (x.isEmpty()) {
    return true;
}
boolean thisNodeEven = x.getValue() % 2 == 0;
return thisNodeEven && allE(x.getLeft()) && allE(x.getRight());

我想您需要评估递归调用的返回值:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM