1

我必须实现一个 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);



        }
    }
}
4

1 回答 1

1

您需要equals()在您的班级中实现一个方法,Student如果 2 名学生相同,则该方法将返回 true studentNo,否则返回false

@Override
public boolean equals(Object ob) {

    if (!(ob instanceof Student)) { 
        return false;
    }

    return ob.getStudentNo().equals(this.getStudentNo());
}

现在,您可以使用contains方法来检查 astudent是否在中List

更新: -

hashcode此外,无论何时,您都需要重写方法overriding equals,以维护它们之间的一般合​​同。因此,覆盖hashcode将仅根据您正在比较的字段计算您hashcodeinstancesobjects

因此,您需要hashcode使用studentNo.

@Override
public int hashcode() {
    return this.getStudentNo().hashCode(); 
}
  • HashCode 计算algorithm应该是这样的,如果两个实例相等,它们的 hashcode 也应该相等
  • 它应该每次都为同一个实例返回相同的值,当然当实例没有被修改时。
  • 两个不同的实例可以有相同的哈希码

正如@hyde 在评论中所建议的那样: -

如果这对您来说工作量太大,那么您可以使用一个不同的方法,它与方法执行相同的任务equals,例如checkEquals(),和ignore覆盖equals()方法。但在这种情况下,您必须iteration对您的List和对每个列表元素执行此操作method,并使用student进行比较。

for(Student student: studentList) {
    if (student.checkEquals(myStudent)) {
        System.out.println("True");
    }
}
于 2012-10-21T16:52:41.480 回答