此方法扫描当前的Staff Employee数组以查看是否
员工的任何成员与员工之间都存在匹配
通过了。

如果不匹配,则返回-1,并且返回Employee的索引号
如果有比赛。


现在我的问题是,我该如何使用-


指数();


正确地获取对象的索引值的方法,然后获取其empId与传入的员工匹配的员工

public int findEmployee(Employee emp) {
    int index = -1;
    for (Employee s : staff) {
        if (emp.getEmpId() == s.getEmpId()) {
            index = indexOf(); //how to use this
        }
    }

    return index;
}


我愿意采用其他任何比较方法,因为我知道indexOf()可以为我搜索和找到empId。因此,如果我必须一起放弃if语句,我不在乎。我认为这将使代码更有效。

最佳答案

从注释中删除,因为对indexOf()的解释对于注释来说可能太长了。其他答题者提供了不错的选择,但我将按照要求的方式回答。

我假设您正在使用某种List(例如staffArrayList<Employee>),因为Arrays实用工具类似乎没有indexOf()方法。

不幸的是,我没有C ++经验,所以我不确定Java中的哪些概念可以很好地映射到C ++。如果你有任何问题随时问。

ArrayList#indexOf(Object o)的Javadoc指出:


返回指定元素在此列表中首次出现的索引;如果此列表不包含该元素,则返回-1。更正式地,返回最低索引i,例如(o==null ? get(i)==null : o.equals(get(i)));如果没有这样的索引,则返回-1。


有趣的部分是:


返回最低索引i,以使(o==null ? get(i)==null : o.equals(get(i)))


因此从本质上讲,indexOf()要做的是循环遍历列表,直到找到以下元素:


如果o == null,则该元素也为null
如果o != nullo.equals(element)返回true


或者,如果不存在这样的元素,则将返回-1。我假设您要转入的员工为空,我将重点介绍第二个选项。

o.equals(element)非常不言自明。但是,有一些注意事项:如果Employee类未覆盖equals(),则可能无法获得所需的行为。这是因为equals()的默认实现会检查引用是否相等(正在比较的两个引用都指向同一个基础对象,类似于我在C ++中猜测的那样,这是两个指向相同位置/对象的指针) ,而不是对象相等(“正常”相等,如果两个对象“代表同一件事”,则两个对象相等,即使它们是不同的对象也是如此)。

因此,在您的情况下,如果您想按ID号匹配“员工”,则需要编写一个equals()方法,该方法接受一个Object,检查它是否为Employee,如果是,如果传递的对象的员工ID与您正在调用equals()的员工的ID匹配。当然,如果已经存在这样的equals()方法,则您无需执行任何操作。如果equals()已经被覆盖并且具有某些不同的行为,那么您可能不走运...

另外,请注意您使用的方法签名是equals(Object o),而不是equals(Employee e)。这是两个不同的方法签名,只有第一个将覆盖Object#equals()

一旦编写了正确的equals()方法,indexOf()应该为您完成其余的工作。

09-09 23:39
查看更多