返回对象时缺少return语句或null

时间:2013-04-03 02:22:45

标签: java compiler-errors return

我是学生,这是一项练习,这是此方法的目标:  此方法应返回名称与之匹配的Athlete数组的第一个元素   名称参数。如果没有匹配的运动员,则返回null。

出于某种原因,我收到了这个错误,

TestAthletes.java:15: error: missing return statement
 }

这是我的代码:

public class TestAthletes{

   public static Athlete findAthleteByName(Athlete[] athletes, String name){
        for(int i=0; i<athletes.length; i++){
            if(name.equals(athletes[i].getName()))
                return athletes[i];
            else
                return null;
        }
    }
}

无法弄清问题是什么。

4 个答案:

答案 0 :(得分:3)

编译器告诉你,如果你有可能到达方法的末尾,那么就没有return语句可以返回任何内容。

并不是说你的代码正在做你想做的事情,但无论如何,你应该放一个return语句,可能是:

return null;

在方法块的末尾。

答案 1 :(得分:2)

你需要在for循环之后有一个return语句,因为athletes.length可以是0,这意味着for循环的主体永远不会被执行。

答案 2 :(得分:1)

我认为你的意思是以下

public class TestAthletes{

   public static Athlete findAthleteByName(Athlete[] athletes, String name){
        for(int i=0; i<athletes.length; i++){
            if(name.equals(athletes[i].getName()))
                return athletes[i];
        }
        return null;
    }
}

在原始代码中,如果athletes.length为0,那么循环永远不会执行,代码到达函数的末尾而不返回任何内容。

另外,我假设您只想在任何迭代中找不到匹配项时返回null,这就是为什么我在循环之后移动了返回语句。

答案 3 :(得分:1)

您的return null语句应该在循环之外。目前,如果第一个值不匹配,它将返回null

public static Athlete findAthleteByName(Athlete[] athletes, String name){
    for(int i=0; i<athletes.length; i++){
        if(name.equals(athletes[i].getName()))
            return athletes[i];
    }
    return null;
}

追踪目前发生的事情。您第一次在athletes[0]循环中测试for。如果不匹配,则if失败,执行else,返回null

此外,如果数组长度为0,则for循环中不会执行任何内容,因此它永远不会return