Java 为什么编译器不能识别我的返回语句?
我有以下代码块:Java 为什么编译器不能识别我的返回语句?,java,string,methods,boolean,logic,Java,String,Methods,Boolean,Logic,我有以下代码块: 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.c
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;
}
我理解,通常情况下,您需要一个返回语句来覆盖if语句中没有一个是真的可能性。这就是为什么我在最后让else返回false
,但仍然得到错误“必须返回布尔类型的结果”。以下是我使用它的电话:
public static void main(String[] args) {
if(isReverse("Java", "avaJ")) {
System.out.println("worked");
}
}
在第一个
if
中,可能不存在返回语句:
if((s1.length()==1)&&s2.length()==1) {
//What if this is not true?
if(s1.equals(s2)) {
return true;
}
}
在该块中,如果s1
不等于s2
,则它将跳出if
,并且自上次返回false以来
链接到else
块,它将到达方法末尾,不返回任何内容
要解决此问题,而不是
否则返回false
,只需返回false
第一个if
具有嵌套的if
条件,这将导致一个分支,在该分支中您不返回任何内容。您可以删除最后一个else
,并使其返回false代码>默认情况下。或者只需将嵌套的if
修改为返回本身。就是改变这个
if((s1.length()==1)&&s2.length()==1) {
if(s1.equals(s2)) {
return true;
}
}
刚好(缩进并去除牙槽嵴)
我们还可以在一行中使用StringBuilder
重新实现该方法,如
public static boolean isReverse(String s1, String s2) {
return new StringBuilder(s1).reverse().toString().equals(s2);
}
或
将否则返回false
更改为返回false
。由于该else
public static boolean isReverse(String s1, String s2) {
return new StringBuilder(s1).reverse().toString().equals(s2);
}
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
}