2012-10-21 68 views
9

可能重复:
How to print object content in correct way?打印出所有的对象数组列表

我需要能够在我的数组列表打印出来的学生对象(所有变量)。这可能吗?当我尝试打印时,输出这种东西,例如[email protected]。我认为这是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); 
     } 


    } 
} 
+1

的[标记:功课]标签depricated。 –

回答

11

覆盖toString()方法在如下Student类:

@Override 
    public String toString() { 
     return ("StudentName:"+this.getStudentName()+ 
        " Student No: "+ this.getStudentNo() + 
        " Email: "+ this.getEmail() + 
        " Year : " + this.getYear()); 
    } 
4

您的Student类中定义的方法public String toString()。例如:

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

如果你使用的是Eclipse,你可以通过点击Source自动完成 - > generate toString() – amit

+0

这听起来可能很愚蠢(对不起,我仍然在学习),但是如果我定义了这个方法,我怎么从里面访问数组列表。 – joe

+0

使用net beans – joe

13

当您打印类的任何情况下,defaulttoString实现Object类被调用时,它返回你所得到的代表性。 它包含两部分: - TypeHashcode

所以,在[email protected],你得到的输出 - >

  • student.StudentType,并且
  • 82701eHashCode

因此,y OU需要重写,以获得所需的String representationStudenttoString方法: -

@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类overrided将被调用和appropri每个实例的表示将被打印。