Duplicata possible:
Comment imprimer correctement le contenu d'un objet?
J'ai besoin de pouvoir imprimer les objets Student (toutes les variables) dans ma liste de tableaux. Est-ce possible? Lorsque j'essaie d'imprimer, il produit ce genre de chose, par exemple student.Student@82701e
. Je pense que c'est hexadecimal
ou quelque chose
Voici mon code:
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);
}
}
}
Remplacez la méthode toString()
dans la classe Student
comme ci-dessous:
@Override
public String toString() {
return ("StudentName:"+this.getStudentName()+
" Student No: "+ this.getStudentNo() +
" Email: "+ this.getEmail() +
" Year : " + this.getYear());
}
Chaque fois que vous imprimez une instance de votre classe, l'implémentation default
toString
de la classe Object
est appelée, ce qui renvoie la représentation que vous obtenez. Il contient deux parties: - Type
et Hashcode
Donc, dans student.Student@82701e que vous obtenez en sortie ->
student.Student
est le Type
, et82701e
est le HashCode
Par conséquent, vous devez remplacer une méthode toString
dans votre classe Student
pour obtenir la configuration requise String representation
: -
@Override
public String toString() {
return "Student No: " + this.getStudentNo() +
", Student Name: " + this.getStudentName();
}
Ainsi, lorsque dans votre classe main
, vous imprimez votre ArrayList
, il invoquera la méthode toString
pour chaque instance, que vous overrided
plutôt que celle dans la classe 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
}
Dans les deux cas ci-dessus, la méthode toString
substituée dans la classe Student
sera invoquée et une représentation appropriée de chaque instance sera imprimée.
Vous devez définir la méthode public String toString()
dans votre classe Student
. Par exemple:
public String toString() {
return "Student: " + studentName + ", " + studentNo;
}