可能性のある複製:
オブジェクトのコンテンツを正しい方法で印刷する方法
配列リストのStudentオブジェクト(すべての変数)を出力できる必要があります。これは可能ですか?印刷しようとすると、_student.Student@82701e
。 hexadecimal
または何かだと思います
これは私のコードです:
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();
Student student1 = new Student();
student1.setStudentName("Bob Marley");
student1.setStudentNo("N0002");
student1.setEmail("[email protected]");
student1.setYear(2);
Students.add(student1);
Student student2 = new Student();
student2.setStudentName("Bill Harvey");
student2.setStudentNo("N0003");
student2.setEmail("[email protected]");
student2.setYear(2);
Students.add(student2);
Student student3 = new Student();
student3.setStudentName("John Beans");
student3.setStudentNo("N0004");
student3.setEmail("[email protected]");
student3.setYear(2);
Students.add(student3);
System.out.println("Add new students: ");
System.out.println("Enter number of students to add: ");
int countStudents = input.nextInt();
for (int i = 0; i < countStudents; i++) {
Student newStudents = new Student();
System.out.println("Enter details for student: " + (i + 1));
System.out.println("Enter name: ");
newStudents.setStudentName(input.next());
System.out.println("Enter Number: ");
newStudents.setStudentNo(input.next());System.out.println("Search by student number: ");
System.out.println("Enter email: ");
newStudents.setEmail(input.next());
System.out.println("Enter year: ");
newStudents.setYear(input.nextInt());
Students.add(newStudents);
}
}
}
Student
クラスのtoString()
メソッドを次のようにオーバーライドします。
@Override
public String toString() {
return ("StudentName:"+this.getStudentName()+
" Student No: "+ this.getStudentNo() +
" Email: "+ this.getEmail() +
" Year : " + this.getYear());
}
クラスのインスタンスを出力するたびに、default
クラスのtoString
Object
実装が呼び出され、取得した表現を返します。 2つの部分が含まれています:-Type
およびHashcode
そのため、student.Student@82701eで出力として得られる->
student.Student
はType
であり、82701e
はHashCode
ですしたがって、必要なString representation
を取得するには、toString
クラスのStudent
メソッドをオーバーライドする必要があります。
@Override
public String toString() {
return "Student No: " + this.getStudentNo() +
", Student Name: " + this.getStudentName();
}
したがって、main
クラスからArrayList
を出力すると、toString
ではなくoverrided
であるインスタンスごとにObject
メソッドが呼び出されます。 ] _クラス:-
List<Student> students = new ArrayList();
// You can directly print your ArrayList
System.out.println(students);
// Or, iterate through it to print each instance
for(Student student: students) {
System.out.println(student); // Will invoke overrided `toString()` method
}
上記の両方のケースで、toString
クラスでオーバーライドされたStudent
メソッドが呼び出され、各インスタンスの適切な表現が出力されます。
Student
クラスでpublic String toString()
メソッドを定義する必要があります。例えば:
public String toString() {
return "Student: " + studentName + ", " + studentNo;
}