【问题标题】:Print Java Object array [duplicate]打印 Java 对象数组 [重复]
【发布时间】:2013-12-15 17:32:27
【问题描述】:

我有一个程序类和一个学生类,学生构造函数创建一个学生并将其存储在数组中,问题是当我尝试打印数组时,我打印出以下内容:

metClassTwo.Student@5c74c3aa

如何让程序正确打印数组详细信息?

打印方式:

  public static void listStudent() {
    for (int i = 0;i < myClassCount;i++) {
      if (myClass[i] != null) {
        System.out.println(myClass[i]);
      }
    }
  }

myClassCount 每添加一个学生就加一。

数组:

  static final Student[] myClass = new Student[6];

【问题讨论】:

  • 没错。您希望打印什么?

标签: java arrays printing


【解决方案1】:

为 Student 类实现 toString() 方法。 例如:

public String toString() {
    return this.name+" "+this.surname;
}

【讨论】:

    【解决方案2】:

    您必须覆盖 Student 类的 toString() 方法。当您说“打印 Student 对象”时,Java 不知道您期望的输出,因此它只是从 Object 类继承 toString() 方法,该方法只是类的名称和当前实例的哈希码。

    尝试这样的事情(并在要打印的学生对象上使用任何变量。

    class Student {
       public String toString() {
           return String.format("%s, %s\n", this.studentName, this.studentAge);
       }
       ...
    }
    

    【讨论】:

      【解决方案3】:
      class Student {
        String name;
        @Override
        public String toString(){ return name;}
      }
      

      myClassCount 不保证索引范围,使用数组长度检查数组的范围。

      for (int i = 0; i < myClass.length; i++) {
        if (myClass[i] != null) {
          System.out.println(myClass[i]);
        } 
      }  
      

      或者更好的使用foreach循环

      for (Student s : myClass) {
        if (s != null) {
          System.out.println(s);
        } 
      }  
      

      【讨论】:

        【解决方案4】:

        你需要重写你的 Student 类的 toString() 方法:

        @Override 
        public String toString() {
          return this.getFirstName() + " " + this.getLastName();
        }
        

        我不知道您的学生课程是什么样的,但这应该可以让您大致了解一下。 如果你不能修改 Student 类,你可以在 println 方法中做同样的事情:

         for (int i = 0;i < myClassCount;i++) {
              if (myClass[i] != null) {
                System.out.println(myClass[i].getFirstName() + " etc...");
              }
        }
        

        【讨论】:

          【解决方案5】:

          方法 Arrays.toString 将很好地打印出你的数组的所有元素。

          您还需要实现学生对象的 toString 方法,以便学生本身可以很好地显示。

          大多数 IDE 都有自动生成 toString 方法的实用程序。对于 Netbeans,请查看源菜单 -> 生成 -> toString。

          【讨论】:

            【解决方案6】:

            您必须覆盖 Student 类中的 toString 方法。

            例如:

            @Override 
            public String toString() {
            
            StringBuilder result = new StringBuilder();
            
            result.append(something);
            .....
            return result.toString();
            }
            

            【讨论】:

            • System.out.println(myClass[i]); 等价于System.out.println(myClass[i].toString());
            • 你是对的。我的错;)
            猜你喜欢
            • 1970-01-01
            • 2017-04-12
            • 2015-06-20
            • 2015-11-17
            • 2014-12-16
            • 1970-01-01
            • 1970-01-01
            • 2019-02-01
            • 1970-01-01
            相关资源
            最近更新 更多