0

我创建了一个程序,其中包含一个名为 Student 的新类,该类设置和获取不同的变量,例如姓名、GPA、是否注册以及何时注册(这是一个字符串,它应该是)。问题是当我尝试将信息存储到数组和/或数组列表中并打印它时,我得到的是哈希码而不是信息。该程序并不完全完整,但我试图首先解决哈希码问题。如果您能提供帮助,我将不胜感激。先感谢您!

    Student st = new Student();


    System.out.println(st.getName());
    Student1();
    Student st1 = new Student("John");

}

public static void Student1() {

    System.out.println("Enter the data for student 1 :");
    Student st = new Student();
    Scanner keyboard = new Scanner(System.in);

    String name = keyboard.next();
    double GPA = keyboard.nextDouble();
    boolean enrolled = keyboard.nextBoolean();
    String date = keyboard.next();
     for (int i =0; i<5; i++){
    Student newStudent = new Student();
    newStudent.setName(name);
    newStudent.setGPA(GPA);
    newStudent.setEnrolled(enrolled);
    newStudent.setDate(date);
    ArrayList <Student> strList = new ArrayList<Student>();
    Student student[] = new Student[5];
    newStudent.getName();
    student[i] = newStudent;

    strList.add(newStudent);
    System.out.println(student[i]);

}

学生班

公共课学生{

private String name;
private double gpa;
private boolean enrolled;
private String enrollDate;

public Student() {

    this.name = "";
    this.gpa = 0.0;
    this.enrolled = false;
    this.enrollDate = "none";

}

public Student(String name1) {
    this.name = name1;
    this.gpa = 0.0;
    this.enrolled = false;
    this.enrollDate = "none";
}

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return this.name;
}

public void setGPA(double gpa) {
    this.gpa = gpa;
}

public double getGPA() {
    return this.gpa;
}

public void setEnrolled(boolean enrolled) {
    this.enrolled = enrolled;


}

public boolean getEnrolled() {
    return this.enrolled;
}

public void setDate(String date) {
}

}

4

4 回答 4

2

这是因为您将一个学生对象放入数组中:

Student student[] = new Student[5];
newStudent.getName();
student[i] = newStudent;

strList.add(newStudent);
System.out.println(student[i]);

在这里,当您打印时,您打印的不是学生姓名,而是对象本身。每当您对对象执行 System.out.println 时,都会返回哈希码。

这是你的问题吗?

于 2013-11-07T20:22:54.840 回答
1
  1. 如果你想要一个对象的字符串表示,这个对象必须实现toString(). 如果您不这样做,则 JVM 中的默认值是打印哈希码。
  2. 如果要打印对象的特定字段,则应在必要时通过方法显式打印该字段;喜欢System.out.println(student[i].getName());
  3. 如果您尝试打印整个数组,则应使用Arrays.toString().
于 2013-11-07T20:21:57.907 回答
0

请覆盖 toString() 方法,因为目前它仅在默认情况下打印来自 Object 类的 toString() 方法,该方法设置为当前对象的 hashcode()。

于 2013-11-07T22:31:03.637 回答
-1

这种打印将获得实例地址,而不是它的打印。

因为您要打印引用类型,VM 不知道您希望它如何显示,或者某些字段是否不用于打印。

它适合您,覆盖“public String toString()”方法并实现您自己的格式。

于 2013-11-07T20:24:08.250 回答