即使我的循环有if和else,也会丢失return语句

时间:2017-05-29 22:46:07

标签: java loops

我有一个方法,其中包含带有return的if和else语句,并且它仍然说它缺少return语句

public boolean isPalindrome(String str){    
    int n = str.length();
    for( int i = 0; i < n/2; i++ ){
        if (str.charAt(i) != str.charAt(n-i-1)){
            return false;
        }
        else{
            return true;  
        }
    }
}

不确定该怎么做,任何建议都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

要找到这种编译错误,您需要遵循该方法的所有路径。

在这种情况下,如果n为零(对于零长度字符串),则永远不会输入for循环,因此没有return语句:

public boolean isPalindrome(String str){  // when str = ""    
    int n = str.length();                 // n = 0
    for( int i = 0; i < 0; i++ ){         // never enters the loop
                                          // no code executed in here
    }
                                          // return statement is missing here
}

似乎(正如@ElliotFrisch指出的那样)你可能想要在for循环之外而不是在else块中使用return true;语句。

答案 1 :(得分:2)

您无法立即返回else(因为您只会检查第一个字符)。你需要像

这样的东西
public boolean isPalindrome(String str) {
    int n = str.length();
    for (int i = 0; i < n / 2; i++) {
        if (str.charAt(i) != str.charAt(n - i - 1)) {
            return false;
        }
    }
    return true;
}

public boolean isPalindrome(String str) {
    return new StringBuilder(str).reverse().toString().equals(str);
}

如果您正在使用带有IntStreamallMatch的Java 8+

public static boolean isPalindrome(String str) {
    return IntStream.range(0, str.length() / 2) //
            .allMatch(i -> str.charAt(i) == str.charAt(str.length() - i - 1));
}

public static boolean isPalindrome(String str) {
    return IntStream.range(0, str.length() / 2) //
            .noneMatch(i -> str.charAt(i) != str.charAt(str.length() - i - 1));
}

答案 2 :(得分:0)

删除其他人。这样做:

public boolean isPalindrome(String str){    
int n = str.length();
for( int i = 0; i < n/2; i++ ){
    if (str.charAt(i) != str.charAt(n-i-1)){
        return false;
    }
   }
        return true;  

    }

因为如果if里面的语句不是真的那么它会转到外面并且只返回不适用条件的值。