我有以下代码块:
public static boolean isReverse (String s1, String s2) {
if((s1.length()==1)&&s2.length()==1) {
if(s1.equals(s2)) {
return true;
}
}
else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
}
else return false;
}
我知道通常您需要一个return语句来解决if语句都不为真的可能性。这就是为什么末尾有else return false
的原因,但仍然出现错误“必须返回布尔类型的结果”。这是我正在使用的电话:
public static void main(String[] args) {
if(isReverse("Java", "avaJ")) {
System.out.println("worked");
}
}
答案 0 :(得分:5)
在第一个if
中,可能没有return语句:
if((s1.length()==1)&&s2.length()==1) {
//What if this is not true?
if(s1.equals(s2)) {
return true;
}
}
在此块中,如果s1
不等于s2
,则它将退出if
,并且由于最后一个return false;
已链接到else
块,它将到达方法的末尾,没有任何返回值。
要解决此问题,而不要else return false
,只需return false;
答案 1 :(得分:2)
第一个if
具有嵌套的if
条件,该条件会导致分支,而您不返回任何内容。您可以删除最后一个else
,并使其默认为return false;
。或简单地将嵌套的if
本身修改为return
。也就是说,更改此
if((s1.length()==1)&&s2.length()==1) {
if(s1.equals(s2)) {
return true;
}
}
改为(重新缩进并删除多余的括号)
if (s1.length() == 1 && s2.length() == 1) {
return s1.equals(s2);
}
我们也可以在一行中用StringBuilder
重新实现该方法,例如
public static boolean isReverse(String s1, String s2) {
return new StringBuilder(s1).reverse().toString().equals(s2);
}
答案 2 :(得分:0)
public static boolean isReverse (String s1, String s2) {
if(s1.length()==1&&s2.length()==1) {
if(s1.equals(s2)) {
return true;
} else {
return false; // This portion need to be return some result.
}
}
else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
}
else return false;
}
或
public static boolean isReverse (String s1, String s2) {
if(s1.length()==1&&s2.length()==1) {
if(s1.equals(s2)) {
return true;
}
}
else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {
return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
}
return false; // Just return the result without else
}