有时可能不会调用If-Else的Else语句?

时间:2016-09-26 07:36:51

标签: java recursion drjava

我的问题很简单:

  • 是否可能在某些情况下不保证其他声明 实例(不包括何时,中断,继续或返回) 预先)?

例如:在此代码中,else语句在结尾处跟随返回调用,但错误:[此方法必须返回Boolean类型的结果]。如果" if"就好像有可能不会调用else。声明是假的。

public static boolean palindrome(String s){
    if (s.length() == 1 ){
    return false;
    }
    else if (s.length() == 2 ){
      if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z' && s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length())){
        return true;
      }  
      else return false;
    }
    else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){
      if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){
        if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1))
          return true && palindrome(s.substring(1,s.length()-1));
      }
      else return palindrome(s.substring(0, s.length()-1));
    }
  }

1 个答案:

答案 0 :(得分:1)

您的else return palindrome(s.substring(0, s.length()-1));语句与内部if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && ...语句相对应,因此您的外部if-else-if块没有else语句。你应该添加一个(或者在那里移动那个else语句,如果这是逻辑需要的话)。

例如,您可以更改

...
else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){
  if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){
    if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1))
      return true && palindrome(s.substring(1,s.length()-1));
  }
  else return palindrome(s.substring(0, s.length()-1));
}

...
else if(s.toLowerCase().trim().charAt(0) >= 'a' && s.toLowerCase().trim().charAt(0) <= 'z'){
  if(s.toLowerCase().trim().charAt(s.length()-1) >= 'a' && s.toLowerCase().trim().charAt(s.length()-1) <= 'z'){
    if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1))
      return palindrome(s.substring(1,s.length()-1));
  }
} else {
    return palindrome(s.substring(0, s.length()-1));
}

当然,这将为您留下一些没有return语句的执行路径 - 例如,当if(s.toLowerCase().trim().charAt(0) == s.toLowerCase().trim().charAt(s.length()-1))的条件为false时,您没有返回语句。

您可以考虑添加最终的return语句作为方法的最后一个语句,而不是将else子句与每个if语句匹配。它可以简化您的代码。