如何将我的返回方法与此代码段合并? (Java,Eclipse)

时间:2014-11-25 21:16:26

标签: java eclipse function class return

我如何从这段代码中获取返回值? 它不允许我在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;
        }

    }


}

2 个答案:

答案 0 :(得分:4)

问题不在return内的for,而在return之外没有for。想想al.isEmpty()会发生什么。并考虑一下你实际循环的频率。重新考虑return null的位置。

考虑到第二次调用it.next()可能不是故意的 - 你真的回到了正确的元素吗?如果它是最后一个匹配的学生怎么办?

小心名字。最好为变量命名它们的含义而不是它们的含义。并保持一致。

ArrayList / Collection包含学生,以及它应如何命名:students

如果Student除了studentNumber之外还有其他号码,即SSN,那么无论何时我们提及它,我们都应该更准确。在这种情况下,getStudentByNumber应重命名为getStudentByStudentNumbernumber应重命名为studentNumber。如果studentNumberStudent所拥有的唯一数字,则应将其重命名为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; 

}