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

标签 java eclipse function class return

我如何从这段代码中获取返回值? 它不允许我在 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 应重命名为 getStudentByStudentNumbernumber 应重命名为 studentNumber。如果 studentNumberStudent 拥有的唯一编号,则应将其重命名为 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/

相关文章:

java - JAXB2.0 -XJC编译问题

c++ - 在 Eclipse 中使用 Qt Designer 创建的 Qt GUI

c++ - Eclipse 4.4 Luna Windows 7 'Program "gcc“在路径中找不到”

java - 是否有独立于语言的方法来向 JSR223 脚本绑定(bind)添加函数?

java - 加载图像 mouseclick - 处理/Java

使用扫描仪扫描图像的 Java 库

java - Appium logcat 捕获失败 : spawn ENOENT (no spaces in path)

eclipse - 如何在 Eclipse for Java EE 中安装 JBoss AS/WildFly 服务器

javascript - 循环函数(Javascript 回调帮助)

ios - 为什么我的 iOS 应用程序中的函数会被调用两次?