我如何从这段代码中获取返回值? 它不允许我在 FOR 循环中使用返回函数,而且我不知道如何继续。
它应该返回一个存储在数组列表 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;
}
}
}
最佳答案
问题不在于for
内部的return
,而在于for
外部没有return
。想想如果 al.isEmpty()
会发生什么。想想你实际循环的频率。重新考虑return null
的放置位置。
考虑一下,第二次调用 it.next()
可能不是有意的 - 您真的返回了正确的元素吗?如果是最后一个匹配的学生怎么办?
注意名字。最好根据变量的含义来命名变量,而不是根据变量的本质来命名。并且保持一致。
ArrayList
/Collection
包含 Students,这就是它的命名方式:students
。
如果学生
除了studentNumber
之外还可以有另一个号码,即SSN,那么每当我们提到它时,我们都应该更准确地描述号码。在这种情况下,getStudentByNumber
应重命名为 getStudentByStudentNumber
,number
应重命名为 studentNumber
。如果 studentNumber
是 Student
拥有的唯一编号,则应将其重命名为 number
,因为在这种情况下 Student.studentNumber
将是多余的,即 Student.getStudentNumber()
应重命名为 Student.getNumber()
。
类型应始终根据要求具体,但不能更具体。换句话说:类型应尽可能通用。如果您的方法采用 ArrayList
,它仅适用于ArrayList
。如果您的方法采用 List
,则它采用所有类型的列表,例如 ArrayList
以及 LinkedList
。如果您的方法采用Collection
,它可以处理更多类型。并且没有理由说它只能与 ArrayList 一起使用。所以类型实际上应该是Collection
。
但无论如何,Java 比这简单得多。您可以让 Java 为您完成工作,而不是显式地使用Iterator
。
public static Student getStudentByNumber(int number, Collection<Student> students) {
for (Student student : students) {
if (student.getStudentNumber() == number) {
return student;
}
}
return null;
}
我会考虑交换参数的顺序。更符合逻辑/惯例的是,首先指定搜索位置,然后指定搜索内容,如下所示:
public static Student getStudentByNumber(Collection<Student> students, int number) {
for (Student student : students) {
if (student.getStudentNumber() == number) {
return student;
}
}
return null;
}
使用 Java 中的函数式编程,它会变得更加简单:
public static Student getStudentByNumber(Collection<Student> students, int number) {
return students.stream()
.filter(student -> student.getStudentNumber() == number)
.findFirst()
.orElse(null);
}
关于java - 如何将我的返回方法与这段代码结合起来? (Java、Eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27136812/