【问题标题】:How to display contents of an object in Java如何在Java中显示对象的内容
【发布时间】:2014-09-17 00:49:43
【问题描述】:

好的,现在我想我已经放弃了为应该是一个简单问题找到解决方案的所有希望。基本上,我正在创建一个学生记录系统,将学生的详细信息存储在一个 ArrayList 中。我首先在 Student 类中创建了一个构造函数来指定每个学生将拥有的条目。然后我在主类(即具有 main 方法的类)中创建了 Student 类的实例,然后将学生对象添加到 studentList ArrayList。

顺便说一句,我最初的目标不是硬编码学生详细信息,而是让用户输入详细信息,然后我将使用 Scanner 或 BufferedReader 对象来获取存储在 Student 对象中的详细信息,然后到 ArrayList 但我也遇到了麻烦;所以我可能会在完成这个问题后立即解决这个问题。

无论如何,我希望输出打印出学生的详细信息,但我得到了一个内存位置(即 [studentrecordsys.Student@15c7850])。我知道我需要重写 toString 方法,但是我似乎无法做到这一点。输入 toString 方法的 @Override 代码块后,我到处都会遇到语法错误。这是我尝试过的:

import java.util.*;

class Student {
    private String studentID;
    private String studentName;
    private String studentAddress;
    private String studentMajor;
    private int studentAge;
    private double studentGPA;

     Student (String studentID, String studentName, String studentAddress, String 
             studentMajor, int studentAge, double studentGPA){

        this.studentID=studentID;
        this.studentName=studentName;
        this.studentAddress=studentAddress;
        this.studentMajor=studentMajor;
        this.studentAge=studentAge;
        this.studentGPA=studentGPA;
     }
}


public static void main(String[] args) {
Student ali = new Student("A0123", "Ali", "13 Bond Street", "BSc Software Engineering", 22, 3.79);
    List<Student> studentList = new ArrayList<>();

    studentList.add(ali);

    @Override
    String toString() {                        
        StringBuilder builder = new StringBuilder();
        builder.append(ali).append(studentList);
        return builder.toString();
    }

    System.out.println(builder);
}

【问题讨论】:

    标签: java arraylist tostring


    【解决方案1】:

    您需要在 Student 对象上实现 toString()。

    public class Student {
        ...
        Your existing code
        ...
    
        @Override
        public String toString() {
            return studentID + ", " + studentName + ", " + //The remaining fields
        }
    }
    

    然后在你的 main 方法中,调用

    for (Student student : studentList) {
        System.out.println(student.toString());
    }
    

    【讨论】:

    • 技术上,你可以使用System.out.println(student);,因为toString在内部被调用...
    【解决方案2】:

    您重写toString 方法,因为它将以您可以理解的可读格式为您提供有关对象的清晰信息。

    覆盖toString的优点:

    帮助程序员记录调试Java程序

    由于 toString 是在 java.lang.Object 中定义的,并没有给出有价值的信息,所以它是 为子类覆盖它的好习惯。

    Source and Read more about overriding toString

    public String toString() { 
        return "Studnet ID: " + this.studentID + ", Student Name:"
               + this.studentName+ ", Studnet Address: " + this.studentAddress
               + "Major" + this.studentMajor + "Age" + this.studentAge
               + GPA" + this.studentGPA ;
    } 
    

    【讨论】:

      【解决方案3】:

      您会收到错误,因为您必须在要使用它的类中重写 toString 方法。即,您必须将方法与 @Override 放在您的 Student 类中。

      你可以这样称呼它:

      System.out.println(studentA.toString());
      System.out.println(studentB.toString());
      

      或在循环中:

      for(Student x : studentList)
          System.out.println(x.toString());
      

      等等..

      此外,在您的代码中,您可以在 main 方法中创建一个方法。当然你会得到错误。

      【讨论】:

      • 技术上,你可以使用System.out.println(x);,因为toString在内部被调用...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多