我如何从这段代码中获取返回值? 它不允许我在FOR循环中使用return函数,我不知道如何继续。
它应该返回存储在Array List al中的对象(在我的main方法中声明)但是我无法让方法正确返回Student对象。
任何提示?
public static Student getStudentByNumber(int number1, ArrayList<Student> al)
{
for(Iterator<Student> it = al.iterator(); it.hasNext();)
{
if(number1 == it.next().getStudentNumber())
{
return it.next();
}
else
{
return null;
}
}
}
答案 0 :(得分:4)
问题不在return
内的for
,而在return
之外没有for
。想想al.isEmpty()
会发生什么。并考虑一下你实际循环的频率。重新考虑return null
的位置。
考虑到第二次调用it.next()
可能不是故意的 - 你真的回到了正确的元素吗?如果它是最后一个匹配的学生怎么办?
小心名字。最好为变量命名它们的含义而不是它们的含义。并保持一致。
ArrayList
/ Collection
包含学生,以及它应如何命名:students
。
如果Student
除了studentNumber
之外还有其他号码,即SSN,那么无论何时我们提及它,我们都应该更准确。在这种情况下,getStudentByNumber
应重命名为getStudentByStudentNumber
,number
应重命名为studentNumber
。如果studentNumber
是Student
所拥有的唯一数字,则应将其重命名为number
,因为在这种情况下Student.studentNumber
将是多余的,即Student.getStudentNumber()
应重命名为Student.getNumber()
。
类型应始终根据需要具体说明,但不一定具体。换句话说:类型应尽可能通用。如果您的方法需要{{1 }},它只适用于ArrayList
。如果您的方法采用ArrayList
,则会采用所有类型的列表,例如List
以及ArrayList
。如果您的方法采用LinkedList
,则它适用于更多类型。并且没有理由它只能与Collection
一起使用。所以类型实际上应该是ArrayList
。
但无论如何,Java比这简单得多。您可以让Java为您完成工作,而不是明确使用Collection
。
Iterator
我会考虑交换参数的顺序。更合乎逻辑/惯例,首先指定搜索的位置,然后搜索要搜索的内容,如下所示:
public static Student getStudentByNumber(int number, Collection<Student> students) {
for (Student student : students) {
if (student.getStudentNumber() == number) {
return student;
}
}
return null;
}
使用Java中的功能编程,它变得更加简单:
public static Student getStudentByNumber(Collection<Student> students, int number) {
for (Student student : students) {
if (student.getStudentNumber() == number) {
return student;
}
}
return null;
}
答案 1 :(得分:1)
如果您声明一个变量来保存最终的返回值,那么它会更清晰,无论该变量最终会保留什么:
public static Student getStudentByNumber(int number1, ArrayList<Student> al)
{
Student studentToReturn = null //return value variable
for(Iterator<Student> it = al.iterator(); it.hasNext();)
{
studentToReturn = it.next();
if(number1 == studentToReturn.getStudentNumber() )
{
return studentToReturn;
}
//get rid of the unnecessary if
}
return studenToReturn;
}