如何将我的返回方法与这段代码结合起来?(Java、Eclipse)

如何将我的返回方法与这段代码结合起来?(Java、Eclipse),java,eclipse,function,class,return,Java,Eclipse,Function,Class,Return,如何从这段代码中获取返回值? 它不允许我在FOR循环中使用return函数,我也不知道如何继续 它应该返回存储在数组列表al中的对象(在我的主方法中声明),但我无法使该方法正确返回Student对象 有什么建议吗 public static Student getStudentByNumber(int number1, ArrayList<Student> al) { for(Iterator<Student> it = al.iterator(); it.has

如何从这段代码中获取返回值? 它不允许我在FOR循环中使用return函数,我也不知道如何继续

它应该返回存储在数组列表al中的对象(在我的主方法中声明),但我无法使该方法正确返回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;
        }

    }


}
public static Student getStudentByNumber(int number1,ArrayList al)
{
for(Iterator it=al.Iterator();it.hasNext();)
{
if(number1==it.next().getStudentNumber())
{
返回它。下一步();
}
其他的
{
返回null;
}
}
}

如果您声明一个变量来保存最终返回值,那么无论该变量最终将保存什么,都会更干净:

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; 

}
public static Student getStudentByNumber(int number1,ArrayList al)
{
Student studentToReturn=null//返回值变量
for(Iterator it=al.Iterator();it.hasNext();)
{
studentToReturn=it.next();
如果(number1==studentToReturn.getStudentNumber())
{
让学生返回学校;
}
//如果不必要的话,就把它扔掉
}
返回学生返回;
}

如果您声明一个变量来保存最终返回值,那么无论该变量最终将保存什么,都会更干净:

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; 

}
public static Student getStudentByNumber(int number1,ArrayList al)
{
Student studentToReturn=null//返回值变量
for(Iterator it=al.Iterator();it.hasNext();)
{
studentToReturn=it.next();
如果(number1==studentToReturn.getStudentNumber())
{
让学生返回学校;
}
//如果不必要的话,就把它扔掉
}
返回学生返回;
}

问题不在于的
内部的
返回
,而在于
外部没有
返回
。想想如果
al.isEmpty()
会发生什么。想想你实际循环的频率。重新考虑
返回null
的位置

考虑到第二次调用
it.next()
可能不是有意的-您真的返回了正确的元素吗?如果是最后一个匹配的学生呢

注意名字。最好根据变量的含义来命名变量,而不是它们是什么。而且要始终如一

ArrayList
/
集合
包含学生,因此应该命名为:
Students

如果一个
学生
除了
学生号
之外还可以有另一个数字,即SSN,那么无论何时提及这个数字,我们都应该更加精确。在这种情况下,
getStudentByNumber
应重命名为
getStudentByStudentNumber
number
应重命名为
studentNumber
。如果
studentNumber
Student
拥有的唯一数字,则应将其重命名为
number
,因为在这种情况下
Student.studentNumber
将是多余的,即
Student.getStudentNumber()
应重命名为
Student.getNumber()

类型应始终根据需要而定,但不能更具体。换句话说:类型应该尽可能通用。如果您的方法采用
ArrayList
,则它仅适用于
ArrayList
。如果您的方法采用
List
,则它采用所有类型的列表,如
ArrayList
以及
LinkedList
。如果您的方法采用
集合
,那么它可以处理更多类型。而且没有理由只使用
ArrayList
。所以类型实际上应该是
Collection

但无论如何,Java要简单得多。不必显式地使用
迭代器,您可以让Java为您完成工作

public static Student getStudentByNumber(int number, Collection<Student> students) {
    for (Student student : students) {
        if (student.getStudentNumber() == number) {
            return student;
        }
    }
    return null;
}
公共静态学生getStudentByNumber(整数,集合学生){
用于(学生:学生){
if(student.getStudentNumber()==number){
留学生;
}
}
返回null;
}
<>我会考虑交换参数的顺序。更符合逻辑/惯例的做法是,首先指定要搜索的位置,然后指定要搜索的内容,如下所示:

public static Student getStudentByNumber(Collection<Student> students, int number) {
    for (Student student : students) {
        if (student.getStudentNumber() == number) {
            return student;
        }
    }
    return null;
}
公共静态学生getStudentByNumber(集合学生,整数){
用于(学生:学生){
if(student.getStudentNumber()==number){
留学生;
}
}
返回null;
}
Java中的函数式编程更简单:

public static Student getStudentByNumber(Collection<Student> students, int number) {
    return students.stream()
        .filter(student -> student.getStudentNumber() == number)
        .findFirst()
        .orElse(null);
}
公共静态学生getStudentByNumber(集合学生,整数){
return students.stream()
.filter(student->student.getStudentNumber()==number)
.findFirst()
.orElse(空);
}

问题不在于
内部的
返回
,而在于
外部没有
返回
。想想如果
al.isEmpty()
会发生什么。想想你实际循环的频率。重新考虑
返回null
的位置

考虑到第二次调用
it.next()
可能不是有意的-您真的返回了正确的元素吗?如果是最后一个匹配的学生呢

注意名字。最好根据变量的含义来命名变量,而不是它们是什么。而且要始终如一

ArrayList
/
集合
包含学生,因此应该命名为:
Students

如果一个
学生
除了
学生号
之外还可以有另一个数字,即SSN,那么无论何时提及这个数字,我们都应该更加精确。在这种情况下,
getStudentByNumber
应重命名为
getStudentByStudentNumber
nu