编译器说我没有返回整数。 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));
}
}
}
}
答案 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的某个值发生,但是我和你的编译器都不能确定这是只是通过查看此代码片段。现代编译器非常聪明,但不是 智能; - )