为什么编译器无法识别我的return语句?

时间:2018-10-15 21:17:54

标签: 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.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");
    }
}

3 个答案:

答案 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
}