在arraylist中查找索引始终为-1

时间:2017-10-10 14:20:24

标签: java arraylist indexof

我试图通过arraylist通过他们的ID属性找到学生对象的索引。然而它总是出现-1。

 public int findIndex(String id) {
    // boolean exists = studentArray.contains(id);
    int index = 0;
    for (int i = 0; i < studentArray.size(); i++) {
        if (studentArray.get(i).getId().equals(id)) {
            return index = studentArray.indexOf(i);
        }
    } return -1;
}

然而在我的演示中

BodyBag bag = new BodyBag(3);
Student student = new Student("Joe","1234",3.5);
Student student2 = new Student("Jill", "5678",3.4);
Student student3 = new Student("Angelina","9101",4.0);
System.out.println(bag.studentArray.get(0).getId().contains("1234"));

实际上是真实的。但是在第一个类中它出现为false并返回-1。提前谢谢。

4 个答案:

答案 0 :(得分:2)

你说你的目标是

  

通过arraylist

通过ID属性查找学生对象的索引

我建议您只需在Student类中实现equals方法,以便当且仅当两个id实例具有相同的{{1}时才返回true然后只需使用indexOf method provided by ArrayList

equals中的Student方法可能如下所示:

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Student other = (Student) obj;
    return id == null ? other.id == null : id.equals(other.id);
}

答案 1 :(得分:1)

您应该只返回索引( i

 return i;

而不是在找到它等于之后,你再次尝试找到 i 的索引,这是不正确的,你应该找到它的id的学生索引,但你已经完成了它并找到了它在索引 i

注意:当您选择查找元素时不会破坏循环,但返回索引时,index变量无效。

答案 2 :(得分:1)

在findIndex()方法中,替换此行

          return index = studentArray.indexOf(i);

          return i ; 

答案 3 :(得分:0)

你有一个概念上的错误。实际上:

studentArray.indexOf( elem );

返回数组中元素 elem 的索引,但 elem 应该是 Student 类。当然,只要这个类提供'等于'的方法。在你的情况下,像:

@Override
public boolean equals( Object obj ) {
    // first you should check if obj is student before casting it...
    Student aux = (Student) obj;
    return this.getId().equals( aux.getId() );
}

您在代码中使用以下代码执行的操作:

return studentArray.indexOf( i );

试图在学生数组(studentArray)中找到一个整数(i)。

其他方式,如下所示,只是返回位置,即:

return i;

干杯。

相关问题