2

我是一名学生,这是一个练习,这是此方法的目标:此方法应返回 Athlete 数组的第一个元素,该元素的名称与 name 参数匹配。如果没有匹配的运动员,则返回 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

4 回答 4

3

编译器告诉您,如果您有机会到达方法的末尾,则没有 return 语句可以返回任何内容。

并不是说您的代码正在执行您希望它执行的操作,但无论如何,您应该放置一个 return 语句,可能是:

return null;

在方法块的末尾。

于 2013-04-03T02:25:28.970 回答
2

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

于 2013-04-03T02:25:59.620 回答
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另外,我认为如果您在任何迭代中都没有找到匹配项,您只想返回,所以这就是我在循环之后移动该 return 语句的原因。

于 2013-04-03T02:25:44.227 回答
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.

于 2013-04-03T02:26:02.333 回答