我需要能够在我的数组列表中打印出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("student2@student.com");
student1.setYear(2);
Students.add(student1);
Student student2 = new Student();
student2.setStudentName("Bill Harvey");
student2.setStudentNo("N0003");
student2.setEmail("student3@student.com");
student2.setYear(2);
Students.add(student2);
Student student3 = new Student();
student3.setStudentName("John Beans");
student3.setStudentNo("N0004");
student3.setEmail("student4@student.com");
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);
}
}
}
答案 0 :(得分:13)
每当您打印任何类的实例时,都会调用default
类的toString
Object
实现,它会返回您正在获取的表示形式。
它包含两部分: - Type
和Hashcode
因此,在 student.Student@82701e 中,您获得了输出 - &gt;
student.Student
是Type
和82701e
是HashCode
因此,您需要覆盖toString
课程中的Student
方法以获取所需String representation
: -
@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
方法,并打印每个实例的适当表示。
答案 1 :(得分:11)
覆盖toString()
课程中的Student
方法,如下所示:
@Override
public String toString() {
return ("StudentName:"+this.getStudentName()+
" Student No: "+ this.getStudentNo() +
" Email: "+ this.getEmail() +
" Year : " + this.getYear());
}
答案 2 :(得分:4)
您必须在public String toString()
课程中定义Student
方法。例如:
public String toString() {
return "Student: " + studentName + ", " + studentNo;
}