【问题标题】:Store array objects into ArrayList, hash code printed [duplicate]将数组对象存储到 ArrayList 中,打印哈希码 [重复]
【发布时间】:2013-11-08 16:54:39
【问题描述】:

我正在编写一个程序来创建一个名为 Student 的新类,该类设置和获取一些不同的变量。除了尝试将正确打印出来的数组元素存储到我的 ArrayList 中之外,我的一切基本上都可以正常工作,而是得到哈希码。我确信改变一两个小事情会解决它,但我无能为力。任何和所有建议都表示赞赏,谢谢!

主要:

    Student st = new Student();
Student();
}

public static void Student() {

    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();
    newStudent.getGPA();
    newStudent.getEnrolled();
    newStudent.getDate();
    newStudent.toString();
    student[i] = newStudent;
    ArrayList myList = new ArrayList();
    myList.add(student[i]);
    System.out.println(student[i].getName());
        System.out.print(student[i].getGPA());
        System.out.print(student[i].getEnrolled());
        System.out.print(student[i].getDate());
     System.out.println(myList);
 }

 }

学生班:

public class Student {

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

public Student() {

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

}

public Student(String name1) {
    this.name = name1;
    this.gpa = 0.0;
    this.enrolled = false;
    this.date = "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) {
    this.date = date;
}

public String getDate(){
return this.date;
}
 }

【问题讨论】:

  • 试试 System.out.println(myList.toString());并覆盖 Student 类中的 toString() 方法。
  • 刚刚试了一下,结果还是一样。
  • 您每次迭代都会创建一个新的 myList - 这是您的意图吗?也许您打算创建一个列表并将每个学生都添加到其中?
  • 还覆盖了 Student 类中的 toString() 方法
  • Pauli,我要将结果打印在一个数组和 5 个学生的数组列表中,所以我想我不想每次都创建一个新的 myList。应该从循环中删除它来解决这个问题吗? wxyz,我该如何覆盖 toString?

标签: java arrays arraylist


【解决方案1】:

数组本身不会使用toString 方法打印它们的内容。请改用Arrays.toString(yourArrayVar)Arrays.deepToString(yourArrayVar)

另外,不要忘记在您的Student 类中重写toString 方法,否则它将使用Object#toString,从而结束以这种格式打印数据(来自JavaDoc):

getClass().getName() + '@' + Integer.toHexString(hashCode())

【讨论】:

    【解决方案2】:

    当您尝试使用此行打印 ArrayList 时,

    System.out.println(myList);
    

    toString() 被调用。它尝试通过(最终)在您的Student 上调用toString() 将其每个项目转换为String。你没有覆盖toString(),所以你看到的“哈希码”是默认的toString() from Object

    覆盖 toString() 以将您的 Student 适当地转换为 String

    @Override
    public String toString()
    {
        // Construct a String here that is appropriate for this class.
        // Return it!
    }
    

    【讨论】:

    • 有道理,我怎么能覆盖 toString?
    • 我想我理解你的建议,我会覆盖每个获取变量的方法吗?即(如果使用注释格式可读) public String getName() { @override public String toString() return this.name;}
    • 不,toString() 只是包含在Student 类中的另一种方法。它不是包含在每种方法中的东西。 (无论如何,你不能嵌套这样的方法。)
    • 好的,我相信你明白你在说什么,但我不知道该怎么做。在这种方法中,我将要做什么?覆盖我理解的预先编写的 toString 方法,但是用什么?这对我来说完全陌生,我很抱歉。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多