我试图通过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。提前谢谢。
答案 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;
干杯。