函数需要多个返回语句

时间:2017-12-03 18:52:04

标签: java function if-statement return-value

我在这里发布两个功能。在findPrime(int m, int i, int n)我有一个外部的if和外部其他块来自我正在返回的块,所以可以认为该函数正在返回我在endOther(String a, String b)中放置相同结构的东西,即 根据函数的返回类型,有两个主要的if-else块都返回值,所以我们可以说函数返回的是endOther(String a, String b) 函数抛出编译时错误,说第一个函数没有抛出这样的错误就把return语句。我不明白这个问题请帮帮我。在eclipse中键入两个函数并检查

1

static boolean findPrime(int m, int i, int n){
    if(n == 0 || n == 1)
        return false;
    else {
        if(i <= m) {
            if(n%i == 0)
                //if(m%i == 0)
                return false;
            else {
                i++;
                //return findPrime(m,i);
                return findPrime(m,i,n);
            }

        }
        else {
            return true;
        }
    }
}

2。

public boolean endOther(String a, String b) {
    if(a.length()==b.length()) {
        if(a.equals(b))
            return true;
        else
            return false;
    }
    else {
        if(a.length()>b.length()) {
            if(a.substring(a.length()-b.length(),b.length()).equals(b))
                return true;
        }
        else { 
            if(b.substring(b.length()-a.length(),a.length()).equals(a))
                return true;
            else
                return false;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的endOther函数必须在所有可能的执行路径上返回一个值。在a.length() > b.length()的情况下,可能不会根据内部if的条件执行返回。

public boolean endOther(String a, String b) {
    if(a.length()==b.length()) {
        if(a.equals(b))
            return true;
        else
            return false;
    }
    else {
        if(a.length()>b.length()) {
            // IF THIS FAILS THERE IS NO RETURN!
            if(a.substring(a.length()-b.length(),b.length()).equals(b))
                return true;
        }
        else { 
            if(b.substring(b.length()-a.length(),a.length()).equals(a))
                return true;
            else
                return false;
        }
    }
}

作为一般说明,您可以使用String中的某些方法来改进代码,例如String.endsWith而不是子字符串操作。这将更具可读性。 ab相同是String.endsWith的特例,因此以下内容应相同:

public boolean endOther(String a, String b) {
    return a.endsWith(b) || b.endsWith(a);
}