我的问题很简单:
例如:在此代码中,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));
}
}
答案 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语句匹配。它可以简化您的代码。