web-dev-qa-db-fra.com

Impression de tous les objets de la liste des tableaux

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


    }
}
9
joe

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

Chaque fois que vous imprimez une instance de votre classe, l'implémentation defaulttoString 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, et
  • 82701e 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.

13
Rohit Jain

Vous devez définir la méthode public String toString() dans votre classe Student. Par exemple:

public String toString() {
  return "Student: " + studentName + ", " + studentNo;
}
4
Andrew Logvinov