在java中使用递归方法时遇到问题

时间:2014-05-18 18:12:38

标签: java recursion

编译器说我没有返回整数。 getC方法返回一个整数。我该如何解决这个问题?

public static int calcCost(Guard[] g, int spot){
    if(spot >= 31078657) return 0;
    else {
        for(int i = 51499; i >= 0; i--){
            if(g[i].getS() == spot && g[i].getF() <= 31078657) {
                return (g[i].getC() + calcCost(g, g[i].getF() + 1));
            }
        }
    }
}

4 个答案:

答案 0 :(得分:1)

如果您的方法没有通过跟踪所有路径返回结果,则会出现此问题。在这种情况下,如果if循环中的for永远不会被执行,那么您就不会返回任何内容。

只需在方法底部添加默认的return语句:

public static int calcCost(Guard[] g, int spot){
    if(spot >= 31078657) return 0;
    else {
        for(int i = 51499; i >= 0; i--){
            if(g[i].getS() == spot && g[i].getF() <= 31078657) {
                return (g[i].getC() + calcCost(g, g[i].getF() + 1));
            }
        }
    }
    //here
    return 0; //or another desired default value
}

答案 1 :(得分:0)

只需在最后添加默认值

public static int calcCost(Guard[] g, int spot){
    if(spot >= 31078657) return 0;
    else {
        for(int i = 51499; i >= 0; i--){
            if(g[i].getS() == spot && g[i].getF() <= 31078657) {
                return (g[i].getC() + calcCost(g, g[i].getF() + 1));
            }
        }
    }
    return -1;// add default value here 
}

或者,如果值无效,您可以抛出IllegalArgumentException之类的异常。

public static int calcCost(Guard[] g, int spot){
    if(spot >= 31078657) return 0;
    else {
        for(int i = 51499; i >= 0; i--){
            if(g[i].getS() == spot && g[i].getF() <= 31078657) {
                return (g[i].getC() + calcCost(g, g[i].getF() + 1));
            }
        }
    }
    throw new IllegalArgumentException();
} 

答案 2 :(得分:0)

你没有在每种情况下都返回一个整数 。如果永远不满足内部条件,则控制将流向方法的末尾而不返回任何内容。

答案 3 :(得分:0)

您需要添加&#39; return&#39;对于你的&#39; for&#39;循环终止 - 即i == 0。不知道这段代码在做什么,你完全有可能确定内部返回必须对于i的某个值发生,但是我和你的编译器都不能确定这是只是通过查看此代码片段。现代编译器非常聪明,但不是 智能; - )