我必须实现一个java应用程序来演示使用数组对象列表。我正在使用学生,我有一个StudentTest课程。我应该可以输入详细信息(我已经完成了)。我只是不确定如何通过学号编号搜索数组列表中的特定对象,还打印数组列表。任何提示都会非常感谢。
到目前为止代码:
package student;
public class Student {
private String studentName;
private String studentNo;
private String email;
private int year;
public Student() {
this.studentName = null;
this.studentNo = null;
this.email = null;
this.year = -1;
}
public Student(String nName, String nNum, String nEmail, int nYr) {
this.studentName = nName;
this.studentNo = nNum;
this.email = nEmail;
this.year = nYr;
}
public void setStudentName(String newStudentName) {
this.studentName = newStudentName;
}
public void setStudentNo(String newStudentNo) {
this.studentNo = newStudentNo;
}
public void setEmail(String newEmail) {
this.email = newEmail;
}
public void setYear(int newYear) {
this.year = newYear;
}
public String getStudentName() {
return studentName;
}
public String getStudentNo() {
return studentNo;
}
public String getEmail() {
return email;
}
public int getYear() {
return year;
}
}
package student;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class studentTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
List<Student> Students = new ArrayList();
System.out.println("Enter number of students");
int countStudents = input.nextInt();
for (int i = 0; i < countStudents; i++) {
Student student1 = new Student();
System.out.println("Enter details for student: " + (i + 1));
System.out.println("Enter name: ");
student1.setStudentName(input.next());
System.out.println("Enter Number: ");
student1.setStudentNo(input.next());
System.out.println("Enter email: ");
student1.setEmail(input.next());
System.out.println("Enter year: ");
student1.setYear(input.nextInt());
Students.add(student1);
}
}
}
答案 0 :(得分:1)
您需要在equals()
课程中实施Student
方法,如果2名学生具有相同的studentNo
,则会返回true,否则为false
。
@Override
public boolean equals(Object ob) {
if (!(ob instanceof Student)) {
return false;
}
return ob.getStudentNo().equals(this.getStudentNo());
}
现在,您只需使用contains
方法检查student
中是否有List
。
更新: -
此外,只要您使用hashcode
overriding
方法,就需要覆盖equals
方法,以维护它们之间的一般合同。因此,请仅基于您要比较hashcode
hashcode
instances
objects
的{{1}}
因此,您需要使用hashcode
计算studentNo
。
@Override
public int hashcode() {
return this.getStudentNo().hashCode();
}
algorithm
应该是这样的,如果两个实例相等,它们的hashcode也应该等于正如@hyde在评论中所建议的那样: -
如果这对您来说太多了,那么您可以使用不同的方法,与equals
方法执行相同的任务,例如checkEquals()
和ignore
覆盖equals()
方法。但在这种情况下,您必须在iteration
上执行List
,并且对于每个列表元素,请使用method
调用此student
进行比较。
for(Student student: studentList) {
if (student.checkEquals(myStudent)) {
System.out.println("True");
}
}