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());
}

これで、メソッドを使用して、 aが内にあるcontainsかどうかを確認できます。studentList

更新: -

また、メソッド間の一般的な契約を維持するために、hashcodeメソッドをオーバーライドする必要があります。したがって、比較しているフィールドのみに基づいて を計算するoverriding equalsオーバーライドhashcodehashcodeinstancesobjects

hashcodeしたがって、 を使用して計算する必要がありますstudentNo

@Override
public int hashcode() {
    return this.getStudentNo().hashCode(); 
}
  • HashCode の計算algorithmは、2 つのインスタンスが等しい場合、それらのハッシュコードも等しくなるようにする必要があります。
  • もちろん、インスタンスが変更されていない場合は、同じインスタンスに対して毎回同じ値を返す必要があります。
  • 2 つの異なるインスタンスが同じハッシュコードを持つことができます

コメントで@hydeが示唆したように:-

これがあまりにも面倒な場合は、メソッドと同じタスクを実行する別のメソッドを使用できます。equalsたとえば、メソッドcheckEquals()ignoreオーバーライドしますequals()。ただし、その場合は、各リスト要素に対して、これを呼び出して比較する必要がありiterationます。Listmethodstudent

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