此方法扫描当前的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
(例如staff
是ArrayList<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 != null
,o.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()
应该为您完成其余的工作。